【问题标题】:How do I get access to the html contents of a popup displayed in a webview?如何访问 web 视图中显示的弹出窗口的 html 内容?
【发布时间】:2021-08-08 14:35:27
【问题描述】:

我的应用程序需要从网站检索数据。 我使用webview 访问所需的页面。在此webview 中显示的页面中,有指向应用程序所需详细信息的链接。当点击链接(使用webView.loadUrl())时,webview 顶部会显示一个弹出窗口。

应用程序可以使用以下代码访问链接:

    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”。

【问题讨论】:

    标签: java android popup processhtml


    【解决方案1】:

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

    参考: Android Calling JavaScript functions in WebView

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-02-24
        • 2013-01-06
        • 1970-01-01
        • 2016-10-23
        • 2022-07-31
        • 1970-01-01
        • 1970-01-01
        • 2012-10-28
        相关资源
        最近更新 更多