首页 > 解决方案 > 有没有办法将 localstorage:getItem() 的结果从 webview 传递给活动

问题描述

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

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

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

标签: javascriptandroidlocal-storageandroid-webviewandroid-4.3-jelly-bean

解决方案


你能行的。首先,您需要像这样将 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));
}

推荐阅读