[英]How to force UIWebView to open link in browser?
我們有一個網站。 在某些情況下,用戶可以使用內置瀏覽器從Facebook App或VKontakte App打開。 並且有一個我想在Safari或其他瀏覽器中打開的鏈接。 但是不在此WebView中。
是否有任何HTML屬性或可以告訴WebView的內容本身無法打開此鏈接?
更新:我不是應用程序開發人員。 我是網頁開發人員。 而且我無權訪問Facebook App。 我需要強制Facebook App不在其內置瀏覽器中打開鏈接。
您可以使用UIWebViewDelegate:
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
if(UIWebViewNavigationTypeLinkClicked == navigationType /*you can add some checking whether link should be opened in Safari */) {
[[UIApplication sharedApplication] openURL:[request URL]];
return NO;
}
return YES;
}
Web視圖包含一些委托方法,可從該委托方法中找到click事件,您需要像這樣調用URL
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"www.google.com"]];
這是在單擊Web視圖內的任何鏈接時將觸發的委托方法
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
if (navigationType == UIWebViewNavigationTypeLinkClicked) {
{
[[UIApplication sharedApplication] openURL:[request URL]];
}
}
只需將URL與URLRequest區分即可。
如果已設置UIWebViewDelegate
,則可以使用方法
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;
使用此方法,我們可以阻止或允許在UIWebView
或移動瀏覽器中打開某些鏈接/ URL。
所以我們可以做類似的事情
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
// We only want to block links
if(navigationType == UIWebViewNavigationTypeLinkClicked) {
NSString *url = [[request URL] absoluteString];
if([url isEqualToString:@"http://www.google.co.uk"]) {
// If the requested url is a link and is http://www.google.co.uk block it from loading in the UIWebView and load it in the mobile browser.
if([[UIApplication sharedApplication] canOpenUrl:[request URL]]) {
// We should be checking to make sure we can open it first, for whatever reason we might not be able to and we don't want to give the user a bad journey.
[[UIApplication sharedApplication] openURL:[request URL]];
// We also need to tell our UIWebView not to do anything so we need to return NO.
return NO;
}
}
}
// If all is OK and we are happy for any other link to be included then just return YES and continue.
return YES;
}
如果要阻止所有鏈接,則只需刪除isEqualToString:
if statement
或者可以通過在if statement
添加else if
來阻止某些鏈接。 此代碼執行以下兩項操作之一:如果傳遞了if statements
則它將加載UIWebView
單擊的鏈接站點,或者將其加載到移動瀏覽器中。
UPDATE
事實證明,用戶沒有在做html
,而這不是原始問題中的目的,這不是用戶的objective-c
,但是由於這可能會在將來對用戶有所幫助,因此我將在這里留下答案。
編輯
由於用戶使用html
嘗試將用戶定向到移動瀏覽器,因此他們所尋找的稱為URL方案。 不幸的是,我不認為從iOS 7
會有任何URL方案可以打開Safari移動瀏覽器。 之前已經有人問過這個問題,所以我不再坐在這里再說一遍,我將引導您解決這個問題,並通過WebView中的鏈接回答Open Mobile Safari
//codigo para abrir no safari
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType; {
NSURL *requestURL =[ [ request URL ] retain ];
if ( ( [ [ requestURL scheme ] isEqualToString: @”http” ] || [ [ requestURL scheme ] isEqualToString: @”https” ] || [ [ requestURL scheme ] isEqualToString: @”mailto” ])&& ( navigationType == UIWebViewNavigationTypeLinkClicked ) )
{ return ![ [ UIApplication sharedApplication ] openURL: [ requestURL autorelease ] ]; } [ requestURL release ]; return YES;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.