【问题标题】:How to get Webview iframe link to launch the browser?如何获取 Webview iframe 链接以启动浏览器?
【发布时间】:2011-04-12 21:06:09
【问题描述】:

我正在使用 WebView 来显示一个页面,其中 html 包含一个 iframe,其中 src="xxxxx.php"。

此 iframe 作为带有底层链接的广告图片加载。如果我单击该图像(链接),它会尝试在原始 iframe 中加载新页面(在那个小空间中显示不多)。我想要发生的是单击链接以在新的浏览器窗口中打开引用的页面,让我的应用保持原样。

如果我使用 Android 浏览器显示原始页面并单击此 iframe,它会将链接加载为新页面。如何使用 WebView 获得相同的行为? iframe 链接似乎没有调用带有 shouldOverrideUrlLoading() 的 WebViewClient。

【问题讨论】:

    标签: android iframe webview


    【解决方案1】:

    我对 WebView 源中的谷歌广告也有类似的问题,因为它们也加载到 iframe 中。我就是这样解决的:

    在你的 WebViewClient 中试试这个,通常在你的 shouldOverrideUrlLoading() 下

                @Override
                public void onLoadResource (WebView view, String url) {
                    if (url.contains("googleads")) {
                        if(view.getHitTestResult().getType() > 0){
                            view.getContext().startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
                            view.stopLoading();
                            Log.i("RESLOAD", Uri.parse(url).toString());
                        }
                    }
                }
    

    【讨论】:

    • 你的回答让我有点困惑。你提到shouldOverrideUrlLoading(),但在你的代码中你使用onLoadResource()
    • 传奇!感谢这个sn-p! Thomas,忽略对 shouldOverrideUrlLoading() 的引用,我认为 acidxwarp 是在 java 文件中引用物理。只需覆盖 onLoadResource,并在触发新意图之前检查 hittestresult
    • 伙计们,这实际上并没有检测到 iframe 点击,你有没有机会想出如何在其他不是 googleads 的东西中检测点击?
    【解决方案2】:

    我可以对之前的代码提出一个修复建议:

    @Override
        public void onLoadResource (WebView view, String url) {
            if (url.contains("googleads")) {
                if(view.getHitTestResult() != null && 
                        (view.getHitTestResult().getType() == HitTestResult.SRC_ANCHOR_TYPE ||
                        view.getHitTestResult().getType() == HitTestResult.SRC_IMAGE_ANCHOR_TYPE)){
                    view.getContext().startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
                    view.stopLoading();
                }
            }
        }
    

    【讨论】:

      【解决方案3】:

      检测 iframe 内的链接点击。链接应该有额外的参数。我发现:

      1. 当 iframe 链接具有目标参数 target="_parent" 或 target="_top" 时,将执行 WebViewClient 的shouldOverrideUrlLoading,
      2. WebViewClient的onCreateWindow,以防iframe链接包含target="_blank"参数

      似乎没有目标参数的 iframe 链接无法通过 WebViewClient 精确跟踪

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-04-14
        • 2014-01-17
        • 2011-11-15
        • 2020-11-29
        • 2021-09-23
        • 2017-07-27
        • 2011-01-18
        • 2019-11-23
        相关资源
        最近更新 更多