2015-09-04 77 views
0

虽然在SO(我可能读过其中大部分)中讨论了shouldOverrideUrlLoading()方面的问题,但我仍然没有找到解决方案,看起来像我这样一个通用的问题,我相信已经解决了。shouldOverrideUrlLoading()没有从iframe调用外部链接

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

当外部链接被触摸(点击)时,我不会调用shouldOverrideUrlLoading()的override方法。 Here它说:“无法用基本URL解析的URL被放置在地板上(你不会为它们获得任何回调,也不应该在OverrideUrlLoading和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(路径) “文件:///存储/ sdcard0 /安卓/数据/ ...”。

非常感谢提前。

回答

0

指出了问题,并找到了解决办法。 如果您的页面在iframe中运行,则单击外部(http://www..。)链接不会触发shouldOverrideUrlLoading()!除非你加target="_top" 所以至少有2个可能的解决方案: 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"); 
    } 
}