首页 文章

Android - webview - shouldOverrideUrlLoading未调用 - 当用户点击iframe内的链接时

提问于
浏览
3

在我们的应用程序中,我们使用webview在视图中加载外部链接 . 使用loadurl方法加载链接并设置webview客户端以显示预加载器和webchrome客户端以监听webview的任何链接更改 .

在webview中加载的URL . 当链接加载时,有几个iframe,在其中我们有一个文本链接 . 点击链接,页面需要在默认浏览器中打开,而不是在webview本身内打开 .

使用min-sdk / API级别8来构建项目 . 以下是供参考的代码段 . 将附加的webview客户端和webchromeclient创建到webview,然后为其分配URL .

private class SomWebViewClient extends WebChromeClient{
    public void onProgressChanged (WebView view, int newProgress){
        if(newProgress == 100){

        }
    }
}
private class SomWebViewDefClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
        startActivity(intent);
        return true;
    }
    @Override
    public void onLoadResource (WebView view, String url){
        if(url.equalsIgnoreCase("http://google.com")){
            view.stopLoading(); 
            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
            startActivity(intent);
            view.canGoBack();
        }
    }
}

我尝试将WebViewClient添加到webview,并在shouldOverrideUrlLoading方法中识别URL更改 . 但这里没有捕获任何事件 . 有没有办法处理webview网址的iframe内的点击 .

当我尝试在webview中打开不同的链接(没有任何iframe)时,能够跟踪在shouldOverrideUrlLoading内部触发的点击 . 但是当URL包含iframe并且当用户在webview内的任何链接上cliks时,无法跟踪shouldOverrideUrlLoading并在同一webview本身而不是新的浏览器窗口中打开 .

当我搜索问题时,我无法找到确切的问题 . 如果有人遇到类似问题并找到解决方案,请分享 .

如果还有其他需要,请告诉我 .

在此先感谢,关心Srinivasan.C

2 回答

  • 1

    也许你打破了Same Origin Policy . 看看this similar post .

    Edit :有一种方法可以克服此安全策略,但您需要接受您面临的风险 . 在响应中,请确保您具有以下标头:"Access-Control-Allow-Origin:"

  • 0

    如果您可以将属性target =“_ top”添加到链接,则会触发shouldOverrideUrlLoading() . 以下JavaScript代码执行此操作:

    function change_links_target()
    {   
        var all_document_links = mFrameDocument.getElementsByTagName("a");
        for (i = 0; i < all_document_links.length; i++){
            all_document_links[i].setAttribute("target", "_top");
        }
    }
    

相关问题