在 webView 和 CordovaWebView android 之间共享 localStorage

Posted

技术标签:

【中文标题】在 webView 和 CordovaWebView android 之间共享 localStorage【英文标题】:share localStorage across webView and CordovaWebView android 【发布时间】:2014-10-25 18:42:41 【问题描述】:

我正在尝试在 webView 和 CordovaWebView 之间共享活动中的数据。 CordovaWebView 当然使用 webView,这就是为什么我不明白为什么存储在我的 phoneGap 应用程序的 localStorage 中的数据在简单的 webView 中不可见,它从与主应用程序相同的位置加载 html 页面。我已经调查过 CordovaWebView 存储的数据存储在文件 /app_webview/Local Storage/file__0.localstorage 中,数据存储在 webView 类存储在文件 /app_webview/Local Storage/__0.localstorage 中,这就是我无法访问数据的原因。 我正在将存储在 localStorage 中的数据的脚本加载到 webView,如下所示:

webView.loadUrl("file:///android_asset/www/script.html");

CordovaWebView 中的主页面加载方式相同:

void loadUrlNow(String url) 
    if (LOG.isLoggable(LOG.DEBUG) && !url.startsWith("javascript:")) 
        LOG.d(TAG, ">>> loadUrlNow()");
    
    if (url.startsWith("file://") || url.startsWith("javascript:") || Config.isUrlWhiteListed(url)) 
        super.loadUrl(url);
    

网址在哪里

file:///android_asset/www/index.html

那么为什么在 CordovaWebView 中 localStorage 保存在文件中

/app_webview/Local Storage/file__0.localstorage

在文件中的 webview 中

/app_webview/Local Storage/__0.localstorage

【问题讨论】:

【参考方案1】:

不幸的是,Android 上 localStorage 的奇怪行为是故意的。您可以通过使用像这样的库来解决本机方面的问题(我自己没有尝试过):

https://github.com/didimoo/AndroidLocalStorage

或者您可以使用 JavaScript 在打开 InAppBrowser 时使用 executeScript 参数填充 localStorage,并在关闭它时读取 localStorage。

http://docs.phonegap.com/en/edge/cordova_inappbrowser_inappbrowser.md.html#executeScript

这适用于少量数据。但是,大量调试可能会很烦人。

【讨论】:

以上是关于在 webView 和 CordovaWebView android 之间共享 localStorage的主要内容,如果未能解决你的问题,请参考以下文章

在恢复 webview 时恢复历史记录和当前页面

在 webview_flutter 中启用捏合和缩放,在哪里添加代码片段 [this.webView.getSettings().setBuiltInZoomControls(true);]

操作系统中未安装webview2

在webview前面的带有adview,webview和搜索输入的XML

新导航和 webview 中的 Uiwebview 链接

在 webView 和 CordovaWebView android 之间共享 localStorage