【问题标题】:How to set value in localStorage of webView如何在 webView 的 localStorage 中设置值
【发布时间】:2016-01-18 13:51:51
【问题描述】:

我正在连接到仅当令牌值正确设置到我的 webView 浏览器时才加载的 url。

这是一个脚本,当我启动 webView 时会发现 userToken 的 null 值:

$.ajaxSetup({
    data: {
        token: localStorage.userToken
    }
});

sendToApp = function(_key, _val) {
    var iframe = document.createElement("IFRAME");
    iframe.setAttribute("src", _key + ":##sendToApp##" + _val);
    document.documentElement.appendChild(iframe);
    iframe.parentNode.removeChild(iframe);iframe = null;
}

IsMobile = true;

$.when(

    loadData.setup()

).then(function(data) {

    Setup = data;

    Struct = new App.Collection.Struct();
    View = new App.View.Phone();
    Zone = new App.Collection.Zone();

    Zone.setAll();
    Zone.findWhere({id:"0"}).set('path', 'Favourites')
    Struct.startLoop();
});

我收到错误:

I/chromium: [INFO:CONSOLE(3)] "Uncaught TypeError: Cannot read property 'userToken' of null" , source: http://217.76.112.72:60180/js/mobile.js (3)

如何将 userToken 设置为我的 android webView 的本地存储,以便该值不再为空?

我阅读了一些关于 webView 数据库或 javascript 参数设置的帖子,但我找不到我的问题的答案:

JS属性设置:

Uncaught TypeError: Cannot set property 'value' of > null" in Android

数据库主题:

Android webview & localStorage

Using local storage on Android webview

例如,在这些主题中,人们正在设置某种数据库的路径,据我所知,该数据库是 localStorage,但如果我是对的,我该如何为其设置值?

编辑:我的 webView 设置:

public void setupWebView(String url, String token) {
    HashMap<String, String> map = new HashMap<>();
    map.put("userToken", token);

    webView.getSettings().setDomStorageEnabled(true);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.loadUrl(url, map);
}

【问题讨论】:

  • 您的 WebView 是如何设置的?这个answer might be appropriate.
  • 您好,我已经发布了我的 webView 设置。如您所见,我正在使用 .setDomStorageEnabled(true);但我不知道应该向哪个对象/如何插入我的键/值,以便上面提供的脚本可以读取它。

标签: javascript android webview


【解决方案1】:

使用 2 参数 loadUrl 将无济于事。您将无法访问标题。

你可以做的是,你可以在你的 WebView 中调用一个函数。

webView.loadUrl("javascript:setUserToken(token)");

您也可以使用此功能在页面上启动其余代码。

function setUserToken(userToken) {
    $.ajaxSetup({
        data: {
            token: userToken
        }
    });

    // ... Launch your ajax
}

【讨论】:

  • 第一次加载 WebView 可能需要一点时间。您可以对其进行测试,将 send loadUrl 函数的执行延迟几秒钟。例如,通过将其设置在要按下的按钮上。
  • sorry :D 我注意到我需要使用参数向 java 添加函数,但我没有它
  • 你好我试过了:webView.loadUrl("javascript:localStorage.setItem(\"userToken\",\"" + token + "\")");但收到:“未捕获的 SecurityError:无法从 'Window' 读取 'localStorage' 属性:拒绝访问此文档。”
猜你喜欢
  • 2019-04-08
  • 1970-01-01
  • 2018-11-26
  • 1970-01-01
  • 1970-01-01
  • 2018-07-22
  • 2018-01-12
  • 2020-01-23
  • 1970-01-01
相关资源
最近更新 更多