2013-05-08 79 views
3

在我們的應用程序中,我們使用webview在視圖內加載外部鏈接。使用loadurl方法加載鏈接,並設置webview客戶端以顯示preloader和webchrome客戶端,以偵聽webview的任何鏈接更改。Android - webview - shouldOverrideUrlLoading未被調用 - 當用戶單擊iframe中的鏈接時

URL在webview中加載。鏈接加載時,有幾個iframe,裏面有一個文本鏈接。點擊鏈接,頁面需要在默認瀏覽器中打開,而不是在webview內部打開。

使用min-sdk/API級別8構建項目。以下是供參考的代碼片段。在webview上創建附加的webview客戶端和webchromeclient,然後爲其分配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(它沒有任何iframes),能夠跟蹤點擊觸發內shouldOverrideUrlLoading。但是,當URL包含iframe,並且當用戶在webview中的任何鏈接上關閉時,無法跟蹤shouldOverrideUrlLoading內部,並在同一個webview本身中打開,而不是在新的瀏覽器窗口中打開。

當我搜索這個問題iam無法找到確切的問題。如果有人遇到類似問題並找到解決方案,請分享。

如果還有其他需要的,請告訴我。

由於事先 問候 Srinivasan.C

回答

1

也許你打破了Same Origin Policy。看看this similar post

編輯:有一種方法可以克服這種安全策略,但您需要接受您面臨的風險。在響應中,請確保您具有以下標題:「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"); 
    } 
} 
相關問題