javascript - 有没有办法将 localstorage:getItem() 的结果从 webview 传递给活动
问题描述
我正在使用 webview 在 android 中加载页面。一旦页面被加载,localstorage 就会更新。我想从中检索数据。在 kitkat 上面,使用 evaluateJavascript 可以获取数据。它有一个回调。问题在于 kitkat 以下的版本,我必须为此使用 loadUrl()。
loadUrl("javascript:localStorage.getItem('"+ key +"')");
我想将函数 getItem() 返回的值传递给调用活动。
解决方案
你能行的。首先,您需要像这样将 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));
}
推荐阅读
- angular - 如何检查字符串(当前 URL)是否包含一些子字符串
- python - Python abc.abstractproperty 兼容性
- c# - 以编程方式创建的元素中的 WPF C# 动态事件路由
- java - org.apache.axis2 maven 插件,没有选择正确的 wsdlFile
- html - 如何使用 rst2html 创建适当的标题级别
- c# - 是否可以在 .NET Standard 中获得驱动器可用空间?
- c# - GetAllIncluding 包含相关表的最后一条记录
- python - 垃圾收集python子进程
- react-native - React 本机应用程序在运行时停滞不前
- maven - 如何解决找不到 vertx-maven-plugin 的问题?