有没有办法将localstorage:getItem()的结果传递给WebView的活动

时间:2019-04-04 05:54:19

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

我正在使用webview在android中加载页面。页面加载后,将更新本地存储。我想从中检索数据。在kitkat上方,使用valuateJavascript能够获取数据。它有一个回调。问题是在kitkat以下的版本中,我必须为此使用loadUrl()。

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

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

1 个答案:

答案 0 :(得分:0)

您可以做到。首先,您需要像这样将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));
}