2015-09-04 46 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"); 
    } 
}