【问题标题】:Android - save value on LocalStorage before WebView.loadUrl()Android - 在 WebView.loadUrl() 之前在 LocalStorage 上保存值
【发布时间】:2023-03-27 08:19:01
【问题描述】:

在我在 WebView 上加载 URL 之前,我想在浏览器 LocalStorage 中设置一个值。

到目前为止,我设法设置此值的唯一方法是在页面加载后。这就是我可以设置值的方式:

browser.setWebViewClient(new WebViewClient() {

        @Override
        public void onPageFinished(WebView view, String url) {
                loadUrl("javascript: LocalStorage.set('namespace', 'key', 'value');");
        }
}

我确实尝试过覆盖方法onPageStarted(),但没有存储该值。

如何在调用browser.loadUrl() 之前设置此键/值? url/page 取决于这个值,所以我需要在加载页面之前设置这个值。

【问题讨论】:

  • 如果你想存储东西,为什么不使用 SharedPreferences(例如)?
  • 我需要将数据保存在 Webview 中,以便网页 javascript 可以读取它。我看不出 SharedPreferences 如何解决我的问题。

标签: javascript android android-webview local-storage


【解决方案1】:

您可以为此使用 WebViewClient.onPageStarted()。

webView.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        super.onPageStarted(view, url, favicon);
        String js = "window.localStorage.setItem('key', 'value');";
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            webView.evaluateJavascript(js, null);
        } else {
            webView.loadUrl("javascript:" + js);
        }
    }
});

【讨论】:

    【解决方案2】:

    您可以做的是将javascript 中的重定向设置为实际网址,并使用webview.loadData() 加载javascript 和重定向。

     String injection = "<html><head><script type='javascript'>LocalStorage.set('namespace', 'key', 'value');window.location.replace('YOUR_URL_HERE');</script></head><body></body></html>";
     webview.loadData(injection, "text/html", null); 
    

    请注意,您可能需要先将其保存到文件中才能使用:请参阅How to load a javascript redirect into android webview?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-17
      • 1970-01-01
      • 2016-10-27
      • 2014-07-31
      • 2021-01-12
      • 2012-09-20
      • 1970-01-01
      相关资源
      最近更新 更多