javascript代码完成后,如何显示WebView?

问题描述

我试图通过使用javascript强制WebView“跳过”图像。 (例如此处:https://stackoverflow.com/a/31848599/13174607)。

问题在于,只有在WebView完成加载后,图像才会消失。我只想在javascript完成后才显示WebView。

这是我的代码

webView.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageFinished(WebView view,String url) {
        super.onPageFinished(webView,url);
        webView.loadUrl("javascript:(function(){ var imgs=document.getElementsByTagName('img');" + "for(i=0;i<imgs.length;i++) { imgs[i].style.display='none'; } })()");
    }
});
}

我尝试使用setVisibility()方法,如下所示:

webView.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageStarted(WebView view,String url,Bitmap favicon) {
        webView.setVisibility(View.INVISIBLE);
    }
    @Override
    public void onPageFinished(WebView view,url);
        webView.loadUrl("javascript:(function(){ var imgs=document.getElementsByTagName('img');" + "for(i=0;i<imgs.length;i++) { imgs[i].style.display='none'; }  })()");
        webView.setVisibility(View.VISIBLE);

    }
});
}

但是没有帮助。 谢谢!

  • 编辑:

通过使用建议的解决方案和@mustansir注释,我将此代码写在了'onPageFinished'上:

    webView.loadUrl("javascript:" + "function taskOne() {" +
        "var imgFlag = 0;" + //will sign when the for loop ended
        "var imgs = document.getElementsByTagName('img');" +
        "if (imgs==0){imgFlag=1;} " +
        "for (i = 0; i < imgs.length; i++) {" +
        "imgs[i].style.display = 'none';" +
        "if (i==imgs.length-1)" +
        "{" +
        "imgFlag=1;" +
        "}"+
        "}}" +
        "taskOne();" +
        "function taskTwo () {" +
        "if(imgFlag==1){" +
        "window.visibility.changeVisibility(); }" +
        "else {" +
        "setTimeout(taskTwo(),100);}}" +
        "taskTwo();");
      

,但Web视图不可见。知道为什么吗?

解决方法

您可以尝试注入JavaScript接口,并在到达循环中的最后一张图片时调用该接口方法以更改WebView的可见性。

类似这样的东西:

webview.addJavascriptInterface(this,"visibility");

并像这样从您的JavaScript调用此接口:

var imgs = document.getElementsByTagName('img');
for (i = 0; i < imgs.length; i++) {
    imgs[i].style.display = 'none';
    if (i == imgs.length-1) {
        visibility.changeVisibility();
    }
}

现在在您添加了changeVisibility()的活动中,用@JavascriptInterface注释定义javascriptInterface

@JavascriptInterface
 public void changeVisibility() {
       runOnUiThread(() -> webview.setVisibility(View.VISIBLE));
    }

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...