有没有办法将 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 传递给活动的主要内容,如果未能解决你的问题,请参考以下文章

Java中有没有啥办法可以将两个类的属性值映射?

有没有办法将 postcss 与样式组件一起使用?

有没有办法将 QVariant 与 QVector 一起使用?

有没有办法将 QTableView 模型转换为 QStandardItemModel

有没有办法将数字单词转换为整数?

NSManagedObject 有没有办法将创建的子类导入 xcdatamodel 文件