在Android Webview中运行JavaScript

Tou*_*che 2 javascript java android webview

我已经尝试了好几个小时才能Javascript在html解析的android webview中运行某些内容Jsoup。尽管我竭尽全力使它起作用,但我仍然无法做到这一点。

我已经在整个Google上进行了搜索,并尝试了所有发现的答案,但是没有一个人尝试使用一种方法来达到我的目的,这就是我最终得到的结果:

Document doc = Jsoup.connect("http://example.com/").get();
Elements web_body = doc.select("body").first().children();
Elements web_head = doc.select("head").first().children();

String javascript = "document.querySelector('h1').innerText='f';"; //Replaces 'Example Domain' with 'f': just an example js code.

WebView webview = findViewById(R.id.webview_id);
webview.getSettings().setJavaScriptEnabled(true);
webview.getSettings().setDomStorageEnabled(true);

String html_content = "<html>" + "<head>" + web_head.toString() + "</head>" + "<body>" + web_body.toString() + "</body>" + "</html>";
webview.loadDataWithBaseURL("", html_content, "text/html", "UTF-8", "");

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
    webview.evaluateJavascript(javascript, null);
} else {
    webview.loadUrl("javascript:(function(){" + javascript + "})()");
}
Run Code Online (Sandbox Code Playgroud)
  • 上面的代码显示了示例页面,但是javascript根本不起作用:该应用程序不显示任何错误消息也不会崩溃。
  • 我正在使用带有Android O(8.0)的手机。

希望以上信息对您有所帮助。我仍然是Java的初学者,任何帮助将不胜感激!

Tou*_*che 5

好吧,我更换了:

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
    webview.evaluateJavascript(javascript, null);
} else {
    webview.loadUrl("javascript:(function(){" + javascript + "})()");
}
Run Code Online (Sandbox Code Playgroud)

与

webview.setWebViewClient(new WebViewClient() {
    public void onPageFinished(WebView webview, String url) {
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
            webview.evaluateJavascript(javascript, null);
        } else {
            webview.loadUrl("javascript:(function(){" + javascript + "})()");
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

它只是工作!