Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将数据保存到LocalStorage,然后使用android Java检索数据_Javascript_Android_Webview - Fatal编程技术网

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

Javascript 将数据保存到LocalStorage,然后使用android Java检索数据,javascript,android,webview,Javascript,Android,Webview,我正在使用WebView在我的android应用程序中加载一个本地网页,我的web页面有一个按钮(比如说“btnA”)。当用户单击btnA时,调用javascript函数,该函数将deviceID保存在浏览器的localstorage中 现在我想问几个问题: 当deviceID保存时,我会显示一个警报,并且该警报在应用程序中工作正常,但一旦设备ID保存后,我如何在手机浏览器中看到它?我在手机中使用Chrome,我尝试进入Chrome>设置>站点设置>存储,但什么都没有 当用户点击btnA时,我想

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

现在我想问几个问题:

  • 当deviceID保存时,我会显示一个警报,并且该警报在应用程序中工作正常,但一旦设备ID保存后,我如何在手机浏览器中看到它?我在手机中使用Chrome,我尝试进入Chrome>设置>站点设置>存储,但什么都没有
  • 当用户点击btnA时,我想在每5分钟点击
    api
    后运行一次后台
    服务
    ,我需要将deviceID(存储在本地存储器中)作为api的
    参数
    传递。如何从android应用程序中的
    localstorage
    获取设备ID,以便将其作为参数传递 以下是我在应用程序中加载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>
    

    您可以创建Javascriptinterface:

    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发送到本机应用程序:

    <script type="text/javascript">
        function sendDeviceId() {
            injectedObject.deviceId(localStorage.getItem("deviceID"));
        }
    </script>
    
    
    函数sendDeviceId(){
    设备ID(localStorage.getItem(“设备ID”);
    }
    
    通过从网站内部调用
    sendDeviceId()
    ,本机应用程序应接收存储的deviceId。这可以在
    saveToLocalStorage()
    方法的末尾完成


    要检查本地存储,您可以在chrome浏览器中打开智能手机上的网站,然后将其连接到计算机并访问
    chrome://inspect/#devices
    从计算机上。这将显示您打开的选项卡,其中有一个要检查的链接,这将打开“网站检查器”,您可以在“应用程序”选项卡中检查该网站的本地存储。

    这就像一个符咒。你能回答我的第一个问题吗?i、 e.在哪里可以看到此id存储在手机浏览器的localStorage中?因为我确实导航到了手机的chrome localStorage,但什么都没有。我正在加载的网页存储在android_res文件夹中,所以我如何在chrome上打开它?我以为它是您局域网或公共网络中的网站。如果它在资源中,我想我会把网站复制到电脑上的网络服务器上,并从手机的chrome浏览器访问它,我知道这很混乱,但我想不出更好的方法。让我们一起来。
    <script type="text/javascript">
        function sendDeviceId() {
            injectedObject.deviceId(localStorage.getItem("deviceID"));
        }
    </script>