【问题标题】:Is there a way to pass result of localstorage:getItem() to activity from webview有没有办法将 localstorage:getItem() 的结果从 webview 传递给活动
【发布时间】:2019-04-04 05:54:19
【问题描述】:

我正在使用 webview 在 android 中加载页面。一旦页面加载完毕,localstorage 就会更新。我想从中检索数据。在 kitkat 上面,使用 evaluateJavascript 可以获取数据。它有一个回调。问题在于 kitkat 以下的版本,我必须为此使用 loadUrl()。

loadUrl("javascript:localStorage.getItem('"+ key +"')");

我想将函数 getItem() 返回的值传递给调用活动。

【问题讨论】:

    标签: javascript android local-storage android-webview android-4.3-jelly-bean


    【解决方案1】:

    你可以做到。首先,您需要像这样将 javascript 界面添加到您的 webview 中。假设您正在一些名为 FormDetailActivity 的活动中加载 url:

    final FormBridge formBridge = new FormBridge(FormDetailActivity.this);
    mWebView.addJavascriptInterface(formBridge, "Android");
    

    formBridge 是一个类的实例,其中编写了所有从 js 调用的方法。

    public class FormBridge extends Activity {
    
    
    private static final String TAG = "FormBridge";
    
    Context mContext;
    
    
    private FormDetailActivity mFormActivity;
    
    
    
    /**
     * Instantiate the interface and set the context
     */
    public FormBridge(Context c) {
        mContext = c;
    
        mFormActivity = (FormDetailActivity) mContext;
    
    }
    
    
    
    @JavascriptInterface
    public String getLocalStorageFromJs(String someStringFromJs) {
        //here you'll get the string from js
    }
    }
    

    要将密钥从 java 传递给您的 js,您需要在 js 中创建一个接受密钥参数的方法,然后您可以这样调用它:

    mWebView.setWebViewClient(new WebViewClient() {
                    @Override
                    public void onPageFinished(WebView view, String url) {
                        super.onPageFinished(view, url);
                   view.loadUrl("javascript:getStringFromLocalStorage('"+key+"')");
    
                    }
                });
    

    然后从你的 js 中调用这个方法,比如:

    function getStringFromLocalStorage(key){
       Android.getLocalStorageFromJs(localStorage.getItem(key));
    }
    

    【讨论】:

    • 我在开发者页面看到了这个。我对如何调用函数 getLocalStorageFromJs() 感到困惑。你能说出'从js调用这个方法'是什么意思吗?
    • 这意味着您的 javascript 代码的编写位置。你可以访问我的声明界面的javascript代码。
    • 这听起来很傻。我知道 JavaScript 接口是要走的路。我的问题是,这个文件是什么,你把函数“getStringFromLocalStorage()”放在哪里。甚至我也做了一个类似的课程并做了一个@JavascriptInterface 注释功能。但是在使用 loadUrl() 调用之后,该函数不会被调用。它没有得到链接。唯一缺少的是您使用过的最后一个“function()”。
    • 您是先加载文件吗?像 mWebView.loadUrl("file:///" + file);在此 onPageFinished 之后,您需要调用 js 方法,例如 view.loadUrl("javascript:getStringFromLocalStorage('"+key+"')");我在上面做了我的回答
    • 没有。我只是在 webview 中加载一个 url。我应该把这个函数放在正在调用的网页中吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-14
    相关资源
    最近更新 更多