4

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

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

使用 min-sdk / API level 8 构建项目。以下是供参考的代码片段。Oncreate 附加的 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 url 的 iframe 内的点击。

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

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

如果还有什么需要,请告诉我。

提前致谢, 问候 Srinivasan.C

4

2 回答 2

1

也许你违反了同源政策。看看这个类似的帖子

编辑:有一种方法可以克服此安全策略,但您需要接受您面临的风险。在响应中,确保您具有以下标题:“Access-Control-Allow-Origin:”

于 2013-05-24T06:39:47.597 回答
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");
    }
}   
于 2015-09-25T15:42:37.403 回答