javascript - 将数据保存到 LocalStorage,然后使用 android Java 检索它

标签 javascript android webview

我正在使用 WebView 在我的 android 应用程序中加载一个本地网页,我的 web 页面 有一个按钮(比如说“btnA” ).当用户单击 btnA 时,调用 javascript 函数,将 deviceID 保存在浏览器的 localstorage 中。

现在有两件事想问一下:

  1. 我在保存 deviceID 时显示了一个警告,并且该警告在应用程序中运行良好,但是保存后我如何在手机的浏览器中看到该 deviceID?我在手机中使用 Chrome,我尝试转到 Chrome > 设置 > 网站设置 > 存储,但没有任何内容。
  2. 当用户点击 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/

相关文章:

javascript - 在输入元素验证时停止表单提交

javascript - jQuery 循环插件 "before"和 "after"回调在初始加载时触发

Android - 使用没有 list 条目的 Activity

Android webview shouldOverrideUrlLoading 未被调用

javascript - 即使服务器响应 200 状态,AngularJs $http post successCallback 也会导致页面重定向

javascript - 从父 React 刷新子状态

java - Android无法将搜索按钮添加到选项菜单

c# - GsmCommMain - C# 中没有电话连接错误(使用宽带棒发送短信)

react-native - 在React Native中更改Webview URL

gwt - 将 Java 数组传递到 JavaScript(通过 JSNI)并返回到 Java 结果为空值