2010-10-19 59 views

回答

2

您可以實施UIWebViewDelegate協議的shouldStartLoadWithRequest方法來攔截鏈接點擊。在該方法內部,您可以使用UIApplication的openURL方法來使URL在相應的應用程序(即用於HTTP/HTTPS的Safari)中打開。

- (BOOL) webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 
{ 
    NSURL *url = [request URL]; 

    if ([url isEqual:YOUR_HOME_URL_CONTSTANT]) 
     return YES; 

    [[UIApplication sharedApplication] openURL:url]; 

    return NO; 
} 
+0

當我實現這個時,UIWebView甚至不會啓動本地內容。它仍然是空的......奇怪的事情。什麼會導致這種情況?這是否也會影響[v loadRequest:request]方法? – 2010-10-19 21:31:31

+0

在此代碼中,您需要檢查網址以查看它是否應該在Safari中加載。例如,也許你想要以file開頭的所有內容:要加載到Web視圖中,在這種情況下,此方法需要返回YES。我的猜測是openURL不會打開一個文件url,並且由於NO返回,webview也不會加載它。 – Nimrod 2010-10-19 21:34:21

+0

是的,在我提供的代碼片段中,所有加載請求都被推送到外部應用程序。如果您想以不同方式加載特定內容,則可以通過任何方式檢查URL的屬性,以確定是本地加載還是遠程加載。返回值BOOL指定webView是否應該繼續並嘗試加載內容本身。我會用一個天真的實現來更新這個例子。 – codelark 2010-10-19 22:20:26

0

您應該實現UIWebViewDelegate的shouldStartLoadWithRequest。在這裏你可以看到UIWebView何時開始加載一個URL。然後,您可以處理應該在此webView中加載的內容以及應由Safari加載的內容。

我的代碼如下所示:

-(BOOL) webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType 
{ 
    if (inType != UIWebViewNavigationTypeLinkClicked) 
    { 
     //This was not a clicked link, so is probably the initial load 
     //and should be loaded in the UIWebView 
     return YES; 
    } 

    //This was a clicked link, so load using Safari 
    [[UIApplication sharedApplication] openURL:[inRequest URL]]; 

    return NO; 
} 

這裏我使用UIWebViewNavigationType,以確定它是否是一個鏈接點擊,並適當響應。

相關問題