如何在android中将javascript localstorage.setItem注入webview?
我已经在android中实现了webview,webview url也成功加载 现在我需要将javascript注入webview。我需要设置localstorage.setItem('key','value')。我发现了很多建议,但都不管用 下面是我如何设置webview和注入javascript的代码如何在android中将javascript localstorage.setItem注入webview?,javascript,android,webview,Javascript,Android,Webview,我已经在android中实现了webview,webview url也成功加载 现在我需要将javascript注入webview。我需要设置localstorage.setItem('key','value')。我发现了很多建议,但都不管用 下面是我如何设置webview和注入javascript的代码 webviewContactUs.getSettings().setJavaScriptEnabled(true); webviewContactUs.getSettings().se
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;
}
}
webviewContactUs.getSettings().setJavaScriptEnabled(true);
webviewContactUs.getSettings().setDomStorageEnabled(true);
webviewContactUs.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
webviewContactUs.getSettings().SetLoadWithOverview模式(true);
webviewContactUs.getSettings().setSupportMultipleWindows(true);
webviewContactUs.getSettings().setAllowFileAccess(true);
webviewContactUs.getSettings().setAllowUniversalAccessFromFileURLs(true);
addJavascriptInterface(javascriptInterfaceTest,“javascriptInterfaceTest”);
setWebViewClient(新的MyWebViewClient());
webviewContactUs.loadUrl(url);
私有类MyWebViewClient扩展了WebViewClient{
@凌驾
public void onPageStarted(WebView视图、字符串url、位图favicon){
super.onPageStarted(视图、url、favicon);
调用函数1(视图);
}
@凌驾
公共布尔值shouldOverrideUrlLoading(WebView视图,字符串url){
返回true;
}
@凌驾
公共void onPageFinished(WebView视图,字符串url){
super.onPageFinished(视图、url);
调用函数1(视图);
}
}
私有void调用函数1(WebView视图){
//addJavascriptInterface(javascriptInterfaceTest,“javascriptInterfaceTest”);
webviewContactUs.evaluateJavascript(javascriptInterfaceTest.getData(),new ValueCallback()){
@凌驾
公共无效onReceiveValue(字符串值){
System.out.println(“==callFunction1 onReceiveValue 1:”+value);
}
});
}
公共类JavascriptInterfaceTest{
私有上下文;
公共JavascriptInterfaceTest(上下文){
mContext=上下文;
System.out.println(“====JavascriptInterfaceTest”);
}
@JavascriptInterface
公共字符串getData(){
字符串key=“\'key\u abc\”;
字符串val=“\'{\'token\”:\“3b46a55ae773c48ad27e43ac7a649737e6ed70477f7562b102054253e5706318\”;
/*String key=“key\u abc”;
字符串val=“{令牌:3b46a55ae773c48ad27e43ac7a649737e6ed70477f7562b102054253e5706318}”*/
//String returnData=“window.sessionStorage.setItem(“+key+”,“+val+”);”;
//String returnData=“window.localStorage.setItem(“+key+”,“+val+”);
字符串returnData=“localStorage.setItem(“+key+”,“+val+”);
//String returnData=“sessionStorage.setItem(“+key+”,“+val+”);”;
System.out.println(“==returnData:”+returnData);
返回数据;
}
}
如果这段代码可以工作,那么在url加载和用户数据,但这是如何工作,因为目前当url加载打开登录屏幕。所以,若任何解决方案在webview中起作用,则不会加载登录屏幕
还有一件事是,在web端并没有任何问题,因为在IOS中,它的工作方式是IOS实现
正如ios开发者实现的图像一样。在ios中,它可以工作,这和我想在webview中做的一样
任何帮助都将受到感谢。提前感谢。这也不起作用,但它会打开登录页面而不是实际页面。
_webView.setWebViewClient(new WebViewClient() {
public void onPageFinished(WebView view, String url) {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
_webView.evaluateJavascript("localStorage.setItem('testkey','testvalue');", null);
} else {
_webView.loadUrl("javascript:localStorage.setItem('testkey','testvalue');");
}
}
});