как внедрить javascript localstorage.setItem в webview в Android?

#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. это также не работает, по-прежнему открывается страница входа в систему вместо фактической страницы.