Как получить ссылку Webview iframe для запуска браузера?

Я использую WebView для отображения страницы, в которой html включает iframe, где src= "xxxxx.php".

Этот iframe загружается как изображение с базовой ссылкой. Если я нажму на это изображение (ссылку), он попытается загрузить новую страницу в исходном iframe (что мало показывает в этом небольшом пространстве). То, что я хочу сделать, - это щелкнуть ссылку, чтобы открыть указанную страницу в новом окне браузера, оставив мое приложение как есть.

Если я использую браузер Android для отображения исходной страницы и нажимаю на этот iframe, он загружает ссылку как новую страницу. Как получить такое же поведение с помощью WebView? Использование WebViewClient с shouldOverrideUrlLoading(), похоже, не вызвано ссылкой iframe.

Ответ 1

У меня была аналогичная проблема с рекламой google в источнике WebView, так как они загружаются также в iframe. Вот как я это решил:

Попробуйте это в своем WebViewClient, как правило, под вашим mustOverrideUrlLoading()

            @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());
                    }
                }
            }

Ответ 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. Ссылки должны иметь дополнительные параметры. Я обнаружил, что:

  • shouldOverrideUrlLoading WebViewClient будет выполняться для случая, когда ссылка iframe имеет целевой параметр target = "_ parent" или target = "_ top",
  • onCreateWindow WebViewClient, в случае, если ссылка iframe содержит параметр target = "_ blank"

Кажется, что ссылки iframe без целевого параметра невозможно точно отслеживать через WebViewClient