我正在使用 WebView
在我的 android
应用程序中加载一个本地网页,我的 web 页面
有一个按钮(比如说“btnA” ).当用户单击 btnA 时,调用 javascript
函数,将 deviceID
保存在浏览器的 localstorage
中。
现在有两件事想问一下:
- 我在保存 deviceID 时显示了一个警告,并且该警告在应用程序中运行良好,但是保存后我如何在手机的浏览器中看到该 deviceID?我在手机中使用 Chrome,我尝试转到 Chrome > 设置 > 网站设置 > 存储,但没有任何内容。
- 当用户点击 btnA 时,我想每 5 分钟运行一次后台
service
,它会触发api
,我需要传递设备 ID(存储在 localStorage 中) 作为 api 的参数
。我如何从我的 android 应用程序中的localstorage
获取该 deviceID,以便我可以将其作为参数传递?
这就是我在应用程序中加载 webview 的方式:
webView = findViewById(R.id.webView);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setDomStorageEnabled(true);
webView.setWebChromeClient(new WebChromeClient());
webView.loadUrl("file:///android_res/raw/index.html");
这是我的网页:
<!DOCTYPE html>
<html>
<head>
<meta content="text/html;charset=utf-8" http-equiv="Content-Type">
<meta content="utf-8" http-equiv="encoding">
</head>
<body>
<button type="submit" value="Click Me" onclick="saveToLocalStorage()">Click Me</button>
<script src="./app.js" type="text/javascript"></script>
</body>
</html>
这是我的app.js
:
function saveToLocalStorage() {
var generatedString = randomString(9, '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ');
if(localStorage.getItem("deviceID") == null){
localStorage.setItem("deviceID", generatedString);
alert("DeviceID saved.")
}
}
function randomString(length, chars) {
var result = '';
for (var i = length; i > 0; --i) result += chars[Math.floor(Math.random() * chars.length)];
return result;
}
最佳答案
你可以创建一个 Javascript 接口(interface):
public class JavaScriptInterface {
Context mContext;
/** Instantiate the interface and set the context */
JavaScriptInterface(Context c) {
mContext = c;
}
@JavascriptInterface
public void deviceId(String deviceId) {
// Do whatever you want with the deviceId
}
}
并将其传递给 webview:
webView.addJavascriptInterface(new JavaScriptInterface(this), "injectedObject");
然后您可以将该 ID 发送到 native 应用:
<script type="text/javascript">
function sendDeviceId() {
injectedObject.deviceId(localStorage.getItem("deviceID"));
}
</script>
通过从网站内部调用 sendDeviceId()
, native 应用程序应该接收存储的 deviceId。这可以在 saveToLocalStorage()
方法的末尾完成。
要检查本地存储,您可以在智能手机上用 chrome 浏览器打开网站,然后将其连接到计算机并从计算机访问 chrome://inspect/#devices
。这应该会显示您打开了选项卡,并且那里有一个检查链接,这将打开网站检查器,您可以在其中检查应用程序选项卡中该网站的本地存储。
关于javascript - 将数据保存到 LocalStorage,然后使用 android Java 检索它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61638166/