onPageFinished Javascript WebView

She*_*urs 2 javascript android webview

我觉得不得不问这个问题很愚蠢,但我终生无法让它发挥作用。

所以我四处搜索并找到了很多关于在 WebViewClient 中使用 onPageFinished 函数的帮助、指南等,我的代码主要基于这些。

基本上我有一个函数应该加载一个网页,然后用 onPageFinished 隐藏该页面上的某些元素。尽管它隐藏了整个页面并且 webview 显示文本“无”,但实际上并没有这样做。当我注释掉 onPageFinished 函数时,webview 加载页面就好了,这让我相信它必须是 javascript,但根据 w3c 站点,我的 javascript 对我想做的事情是正确的...

所以我的问题是,有没有人看到以下代码的问题和/或任何人对其他可能实现我上述目标的东西有建议?

任何帮助使其正常工作将不胜感激。

代码:

public class MainActivity extends AppCompatActivity{

    private WebView browser;
    private String url = "https://www.google.com";

    < onCreate calls cleanPage and other stuff >

    public void cleanPage() {
        browser = (WebView) findViewById(R.id.webview);
        browser.getSettings().setJavaScriptEnabled(true);
        browser.setWebViewClient(new WebViewClient() {
            @Override
            public void onPageFinished(WebView view, String url) {
                browser.loadUrl("javascript:document.getElementById('lga').style.display='none';");
            }
        });
        browser.loadUrl(url);
    }
}
Run Code Online (Sandbox Code Playgroud)

笔记:

-以上以google为例,lga为goo​​gle横幅div的id。

-browser 和 url 是全局的,因为一旦我让 cleanPage 工作,我将添加其他函数来根据需要改变它们。

Mik*_*nov 5

您需要void(0);javascript:URL末尾添加。否则, WebView 会用 JS 评估的结果(在您的情况下,即 string "none")替换您的当前页面。

所以改变这个:

browser.loadUrl("javascript:document.getElementById('lga').style.display='none';");
Run Code Online (Sandbox Code Playgroud)

到:

browser.loadUrl("javascript:document.getElementById('lga').style.display='none';void(0);");
Run Code Online (Sandbox Code Playgroud)