Streamlit-JS-Eval
SJE is a custom Streamlit component, built to evaluate arbitrary Javascript expressions and return the result. It can become useful in doing certain functionalities which are simple things in JavaScript, but unavailable or difficult to do in Streamlit. Examples include cookie management, writing to clipboard, getting device width (e.g. to check if we are on a mobile device), getting browser language, sharing something through Android's share feature, knowing user agent, etc. See MDN docs for more information about Web APIs.
- Version 0.1.7 - March 2024: Proposed a workaround for issue #2.
Install
pip3 install streamlit_js_eval
Example
st.write(f"Screen width is {streamlit_js_eval(js_expressions='screen.width', key = 'SCR')}")
key is an arbitrary but unique string, required by Streamlit components API for each call to streamlit_js_eval.
Common JavaScript functionalities
Some more common functionalities are already implemented as Python functions. Examples include:
# Returns user's location after asking for permission
location = get_geolocation()
# Check if location permission was denied
if location and 'error' in location:
if location['error']['code'] == 1:
st.error("Location permission denied")
else:
st.warning(f"Geolocation error: {location['error']['message']}")
elif location:
st.write(f"Latitude: {location['coords']['latitude']}")
st.write(f"Longitude: {location['coords']['longitude']}")
# The URL parts of the page
location_json = get_page_location()
See streamlit_js_eval/__init__.py for more functions. Check a demo in example.py or see it live.
Handling Geolocation Errors
The get_geolocation() function now returns error information when the user denies permission or when geolocation fails. The returned object will have an error key with code and message fields:
location = get_geolocation()
if location and 'error' in location:
error_code = location['error']['code']
error_msg = location['error']['message']
# Error codes:
# 0: Browser doesn't support geolocation
# 1: Permission denied by user
# 2: Position unavailable
# 3: Timeout
if error_code == 1:
st.error("User denied location permission")
# Disable location-related buttons, etc.
else:
st.warning(f"Geolocation error: {error_msg}")
elif location:
# Success - location contains coords and timestamp
st.write(f"Lat: {location['coords']['latitude']}, Lon: {location['coords']['longitude']}")
Known Limitations
- It seems SJE has issues with
st.buttonwhen getting called from inside a branch in Streamlit (e.g. in a loop,if-elseblock, ...). In version 0.1.7, you may use the custombootstrapButtonas a workaround in such situations.
Release files for streamlit-js-eval 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| streamlit_js_eval-1.0.0.tar.gz | 11.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| streamlit_js_eval-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 22.8 kB
Release files / streamlit_js_eval-1.0.0.tar.gz
| Download URL | streamlit_js_eval-1.0.0.tar.gz |
|---|---|
| Size | 11.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9e2b2005e3e8a4971d222488a02c880b7b93c8951393ff7f97419ded914498e4
|
|
BLAKE2b-256 checksum How to use checksums |
10431403cdd4cafd4df8509e60d04b67bbd2e5fa454c03528d53e337c8022b1f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.3
|
Release files / streamlit_js_eval-1.0.0-py3-none-any.whl
| Download URL | streamlit_js_eval-1.0.0-py3-none-any.whl |
|---|---|
| Size | 11.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4876f56dadb6a578615661b43bbec772c93dd4cd12efb2a2310534da06c34dbb
|
|
BLAKE2b-256 checksum How to use checksums |
7c40ae13b0290e89056ea16fbce331a94fa8bfb50cfeb7c1947e61e842636f94
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.3
|