【问题标题】:shouldOverrideUrlLoading() not called for external links from iframe来自 iframe 的外部链接不调用 shouldOverrideUrlLoading()
【发布时间】:2015-09-04 15:35:53
【问题描述】:

尽管在 SO 中很好地讨论了 shouldOverrideUrlLoading() 的问题(我可能阅读了其中的大部分内容),但我仍然没有找到解决方案来解决我认为已经解决的如此普遍的问题。

问题:如何在 shouldOverrideUrlLoading() 中停止外部链接,例如“http://www.example.com”,对于我使用 webView.loadDataWithBaseURL() 加载的页面,其中 baseUrl 是“file:///...”?

当触摸(单击)外部链接时,不会调用我的 shouldOverrideUrlLoading() 覆盖方法。 Here 它说“无法根据基本 URL 解析的 URL 被丢弃在地板上(你不会得到任何回调,无论是 shouldOverrideUrlLoading 还是 onPageStarted)。” Android 开发者网站说 here 说“如果您通过调用 ... loadDataWithBaseURL() 加载页面,那么您将收到 页面上此类链接的 shouldOverrideUrlLoading() 回调。” 这是我的代码:

public void loadEpub(final EpubInfo epubInfo)
{
    post(new Runnable()
    {
        @Override
        public void run()
        {
            epubBaseUrl = "file://" + epubInfo.path;
            if (!epubBaseUrl.endsWith("/"))
                epubBaseUrl += "/";

            String path = epubBaseUrl + epubInfo.baseUrl;
            String page = generatePage(epubInfo);
            EpubWebView.super.loadDataWithBaseURL(path, page, "text/html", "UTF-8", null);
        }
    });
}

我的 baseUrl(路径)是“file:///storage/sdcard0/Android/data/...”。

非常感谢。

【问题讨论】:

    标签: android android-webview


    【解决方案1】:

    查明问题,并找到解决方案。 如果您的页面在 iframe 中运行,则单击外部 (http://www...) 链接不会触发 shouldOverrideUrlLoading()!除非你加target="_top" 所以至少有两种可能的解决方案: 1) 如果可以,请在没有iframe 的情况下运行 2)如果您添加到每个hreftarget="_top"shouldOverrideUrlLoading() 将被触发。

    我选择了解决方案 2)。以下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");
        }
    }   
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-03
      • 2012-06-27
      • 1970-01-01
      • 1970-01-01
      • 2017-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多