有没有办法将 localstorage:getItem() 的结果从 webview 传递给活动
Posted
技术标签:
【中文标题】有没有办法将 localstorage:getItem() 的结果从 webview 传递给活动【英文标题】:Is there a way to pass result of localstorage:getItem() to activity from webview 【发布时间】:2019-04-04 05:54:19 【问题描述】:我正在使用 webview 在 android 中加载页面。一旦页面加载完毕,localstorage 就会更新。我想从中检索数据。在 kitkat 上面,使用 evaluatejavascript 可以获取数据。它有一个回调。问题在于 kitkat 以下的版本,我必须为此使用 loadUrl()。
loadUrl("javascript:localStorage.getItem('"+ key +"')");
我想将函数 getItem() 返回的值传递给调用活动。
【问题讨论】:
【参考方案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。我应该把这个函数放在正在调用的网页中吗?以上是关于有没有办法将 localstorage:getItem() 的结果从 webview 传递给活动的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法将 QVariant 与 QVector 一起使用?