Android - 在WebView.loadUrl()之前在LocalStorage上保存值

时间:2015-10-27 16:13:30

标签: javascript android android-webview local-storage

在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取决于此值,因此我需要在加载页面之前设置该值。

2 个答案:

答案 0 :(得分:5)

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

 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?

答案 1 :(得分:0)

您可以为此使用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);
        }
    }
});