UIWebView在Safari中打開鏈接我有一個非常簡單的UIWebView,其中包含我的應(yīng)用程序包中的內(nèi)容。我希望Web視圖中的任何鏈接都在Safari中打開,而不是在Web視圖中打開。這可能嗎?
3 回答

慕標(biāo)5832272
TA貢獻1966條經(jīng)驗 獲得超4個贊
將其添加到UIWebView委托:
(編輯以檢查導(dǎo)航類型。您還可以傳遞file://
相關(guān)鏈接的請求)
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { if (navigationType == UIWebViewNavigationTypeLinkClicked ) { [[UIApplication sharedApplication] openURL:[request URL]]; return NO; } return YES;}
Swift版本:
func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool { if navigationType == UIWebViewNavigationType.LinkClicked { UIApplication.sharedApplication().openURL(request.URL!) return false } return true }
Swift 3版本:
func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool { if navigationType == UIWebViewNavigationType.linkClicked { UIApplication.shared.openURL(request.url!) return false } return true}
Swift 4版本:
func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebView.NavigationType) -> Bool { guard let url = request.url, navigationType == .linkClicked else { return true } UIApplication.shared.open(url, options: [:], completionHandler: nil) return false}
更新
正如openURL
iOS 10中已棄用的那樣:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { if (navigationType == UIWebViewNavigationTypeLinkClicked ) { UIApplication *application = [UIApplication sharedApplication]; [application openURL:[request URL] options:@{} completionHandler:nil]; return NO; } return YES;}

慕容森
TA貢獻1853條經(jīng)驗 獲得超18個贊
在Swift中,您可以使用以下代碼:
extension YourViewController: UIWebViewDelegate { func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebView.NavigationType) -> Bool { if let url = request.url, navigationType == UIWebView.NavigationType.linkClicked { UIApplication.shared.open(url, options: [:], completionHandler: nil) return false } return true }}
確保檢查URL值和navigationType。

長風(fēng)秋雁
TA貢獻1757條經(jīng)驗 獲得超7個贊
接受的答案不起作用。
如果您的網(wǎng)頁通過Javascript加載網(wǎng)址,navigationType
則會是UIWebViewNavigationTypeOther
。遺憾的是,其中還包括后臺頁面加載,例如分析。
要檢測頁面導(dǎo)航,您需要將其[request URL]
與[request mainDocumentURL]
。
此解決方案適用于所有情況:
- (BOOL)webView:(UIWebView *)view shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)type{ if ([[request URL] isEqual:[request mainDocumentURL]]) { [[UIApplication sharedApplication] openURL:[request URL]]; return NO; } else { return YES; }}
- 3 回答
- 0 關(guān)注
- 745 瀏覽
添加回答
舉報
0/150
提交
取消