Android webview javascript 不适用于 API 18 或更高版本

Cün*_*eyt 0 javascript android webview webviewclient

我想WebView通过操作一些 DOM 元素来显示一个网站。我的意思是,我想删除一个特殊的 div 元素或用某些东西替换它。为此,我做了这样的事情:为了替换我使用这个模型的东西

document.getElementById("demo").innerHTML = "Hello World!";
Run Code Online (Sandbox Code Playgroud)

我将它应用到 Android 上WebView是这样的:

public class WebClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }
    @Override
    public void onPageFinished(WebView view, final String url) {
             view.loadUrl("javascript:document.getElementById(\"jumbotron-company\").innerHTML = \"\";");
    }
}
Run Code Online (Sandbox Code Playgroud)

它可以在我的 API 为 18 的设备上工作,但不能在 API 大于 18 的模拟器或设备上工作

Mik*_*nov 5

@Mattia 说的是正确的。如果可能的话使用evaluateJavascript。它的另一个优点是能够从 JavaScript 返回结果的值。

但如果您想要一个与 API 无关的解决方法,请确保您使用的代码评估loadUrl("javascript:...")不会产生任何返回值。赋值返回指定的值。在较新版本的 WebView 中,此值用作替换现有页面的新页面的内容。

您可以通过两种方式确保正在计算的表达式不会产生返回值:

  • void(0);在末尾附加语句,例如loadUrl("javascript:elt.innerHTML='Hello World!';void(0);");

  • 在不返回值的函数内运行代码,例如loadUrl("(function(){elt.innerHTML='Hello World!';})()");