#javascript #android #webview
#javascript #Android #веб-просмотр
Вопрос:
Я реализовал webview в Android, и URL-адрес webview также успешно загружен.
Теперь мне нужно внедрить javascript в webview. Мне нужно установить localstorage.setItem(‘ключ’,’значение’). Я нашел много предложений, но ни одно из них не работает.
вот код, как я устанавливаю 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 не будет загружаться экран входа в систему.
Еще одна вещь, с веб-стороны нет никаких проблем, потому что в IOS она работает, вот реализация ios
Как на изображении, реализованном разработчиком ios. И в ios это работает, то же самое, что я хочу сделать в webview.
Любая помощь будет оценена. Заранее благодарю.
Ответ №1:
_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');");
}
}
});
Комментарии:
1. это также не работает, по-прежнему открывается страница входа в систему вместо фактической страницы.