Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get Webview iframe link to launch the browser?

I'm using a WebView to display a page in which the html includes an iframe where src="xxxxx.php".

This iframe loads as an ad image with an underlying link. If I click on that image (link), it tries to load the new page within original iframe (which doesn't show much in that little space). What I want to happen is clicking on the link to open the referred page in a new browser window, leaving my app as is.

If I use the Android browser to display the original page and click on this iframe, it loads the link as a new page. How do I get the same behavior with a WebView? Using a WebViewClient with shouldOverrideUrlLoading() doesn't seem to be called by the iframe link.

like image 910
Marcus Avatar asked Apr 12 '11 21:04

Marcus


2 Answers

I had a similar issue with google ads in a WebView source, since they load in an iframe as well. This is how I resolved it:

Try this in your WebViewClient, typically under your 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());
                    }
                }
            }
like image 110
acidxwarp Avatar answered Dec 03 '22 08:12

acidxwarp


I can propose one fix to previous code:

@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();
            }
        }
    }
like image 37
Fedir Tsapana Avatar answered Dec 03 '22 08:12

Fedir Tsapana