如何访问 Web 视图中显示的弹出窗口的 html 内容?

How do I get access to the html contents of a popup displayed in a webview?

我的应用程序需要从网站检索数据。 我使用 webview 访问所需的页面。在此 webview 中显示的页面中,有 link 指向应用所需的详细信息。跟随 link(使用 webView.loadUrl())时,会在 webview.

顶部显示一个弹出窗口

应用程序使用以下代码访问 links:

    webView.getSettings().setJavaScriptEnabled(true);
    webView.addJavascriptInterface(new BackgroundScriptInterface(), "HTMLOUT");
    webView.setWebViewClient(new WebViewClient(){
        @Override
        public void onPageFinished(WebView view, String url)
        {
            webView.loadUrl("javascript:window.HTMLOUT.processHTML('<head>'+document.getElementsByTagName('html')[0].innerHTML+'</head>');");
        }
    });

public class BackgroundScriptInterface {
    @JavascriptInterface
    public void processHTML(String html) {
        ...
    }

但是这个 BackgroundScriptInterface 不会在显示弹出窗口时调用。

如何访问弹出窗口的 html 内容?

编辑 正如下面 Eddie 所建议的,我试过了

    webView.evaluateJavascript(item.competDetailUrl, new ValueCallback<String>() {
        @Override
        public void onReceiveValue(String s) {
            Log.d("competDetail", s);
        }
    });

弹出窗口仍按预期显示。但是传递给 onReceiveValue 回调的值是“null”。

尝试使用 webView.evaluateJavascript() 而不是 webView.loadUrl(),除非您需要使用 Kitkat 之前的设备

参考: Android Calling JavaScript functions in WebView

应用程序从该站点检索的信息不需要显示在 UI 上。它们在应用程序逻辑中被解析和使用。因此,我设计了以下解决方法:我用 javascript:apex.navigation.redirect() 替换了原来的 javascript:apex.navigation.dialog(),将请求的信息直接显示到 webview 而不是弹出窗口 window .

由于信息现在进入webview,可以通过上面的BackgroundScriptInterface访问。