【发布时间】:2020-12-07 05:56:19
【问题描述】:
我已经在 android 中实现了 webview,并且 webview url 也成功加载了。
现在我需要将 javascript 注入 webview。我需要设置 localstorage.setItem('key','value')。我找到了很多建议,但没有一个有效。
这是我如何设置 webview 和注入 javascript 的代码
webviewContactUs.getSettings().setJavaScriptEnabled(true);
webviewContactUs.getSettings().setDomStorageEnabled(true);
webviewContactUs.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
webviewContactUs.getSettings().setLoadWithOverviewMode(true);
webviewContactUs.getSettings().setSupportMultipleWindows(true);
webviewContactUs.getSettings().setAllowFileAccess(true);
webviewContactUs.getSettings().setAllowUniversalAccessFromFileURLs(true);
webviewContactUs.addJavascriptInterface(javascriptInterfaceTest, "javascriptInterfaceTest");
webviewContactUs.setWebViewClient(new MyWebViewClient());
webviewContactUs.loadUrl(url);
private class MyWebViewClient extends WebViewClient {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
callFunction1(view);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
callFunction1(view);
}
}
private void callFunction1(WebView view) {
//webviewContactUs.addJavascriptInterface(javascriptInterfaceTest, "javascriptInterfaceTest");
webviewContactUs.evaluateJavascript(javascriptInterfaceTest.getData(), new ValueCallback<String>() {
@Override
public void onReceiveValue(String value) {
System.out.println("==== callFunction1 onReceiveValue 1 : " + value);
}
});
}
public class JavascriptInterfaceTest {
private Context mContext;
public JavascriptInterfaceTest(Context context) {
mContext = context;
System.out.println("===== JavascriptInterfaceTest");
}
@JavascriptInterface
public String getData() {
String key = "\'key_abc\'";
String val = "\'{\"token\":\"3b46a55ae773c48ad27e43ac7a649737e6ed70477f7562b102054253e5706318\"}\'";
/*String key = "key_abc";
String val = "{token:3b46a55ae773c48ad27e43ac7a649737e6ed70477f7562b102054253e5706318}";*/
//String returnData = "window.sessionStorage.setItem(" + key + "," + val + ");";
//String returnData = "window.localStorage.setItem(" + key + "," + val + ")";
String returnData = "localStorage.setItem(" + key + "," + val + ")";
//String returnData = "sessionStorage.setItem(" + key + "," + val + ");";
System.out.println("==== returnData : " + returnData);
return returnData;
}
}
如果此代码可以正常工作,那么在 url 中加载用户数据,但由于当前加载 url 时会打开登录屏幕,因此有些方法无法正常工作。因此,如果任何解决方案在 webview 中有效,则不会加载登录屏幕。
还有一点是web端没有任何问题,因为它在IOS中工作,这里是ios实现
正如在图像 ios 开发人员中实现的那样。在 ios 中它的工作,我想在 webview 中做同样的事情。
如有任何帮助,我们将不胜感激。提前致谢。
【问题讨论】:
标签: javascript android webview