2013-11-19 5 views
1

У нас есть сайт. В некоторых случаях пользователи могут открывать приложение Facebook или приложение ВКонтакте, используя встроенный браузер. И есть ссылка, которую я хочу открыть в Safari или в другом браузере. Но не в этом WebView.Как заставить UIWebView открыть ссылку в браузере?

Является ли какое-либо свойство HTML или что-то, что может сказать, что WebView не открывает эту ссылку сам по себе?

UPDATE: Я не разработчик приложений. Я веб-разработчик. И у меня нет доступа к Facebook App. Мне нужно заставить приложение Facebook открывать ссылки не во встроенном браузере.

+0

Пытались ли вы что-нибудь? – Popeye

+0

Я попытался добавить target = "_ blank" в ссылку, но это не помогло. – Orange

+0

Нет, ничего не сделаешь с 'UIWebView', вы пробовали какие-либо ответы? Вам нужно перехватить щелчок в 'shouldStartLoadWithRequest:' и вернуть НЕТ, чтобы 'UIWebView' не загружался, но перед возвратом НЕТ вам нужно будет делать то, что вы хотите сделать. – Popeye

ответ

0

Web представление содержит некоторые методы делегата, чтобы найти событие щелчка от этого метода делегата вам нужно вызвать URL как этот

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"www.google.com"]]; 

Этот метод делегата, который будет срабатывать при нажатии на любую ссылку внутри веб-просмотра

-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 
{ 
if (navigationType == UIWebViewNavigationTypeLinkClicked) { 
{ 
    [[UIApplication sharedApplication] openURL:[request URL]]; 
} 

} 

просто отличает URL-адрес URLRequest.

+0

У вас есть опечатка в '[[UIApplication sharedApplication] openURL: [[URL-адрес запроса]];' – Popeye

+0

@Popeye Отвечено обновлено. Благодарю. – Ganapathy

+0

Разные опечатки теперь должны быть '[[UIApplication sharedApplication] openURL: [URL запроса]];' – Popeye

4

Вы можете использовать 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; 
} 
-1

Если Вы установили UIWebViewDelegate вы можете использовать метод

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType; 

Используя этот метод, мы можем заблокировать или разрешить некоторые ссылки/URLы будет открыт в либо UIWebView, либо в мобильном браузере.

Таким образом, мы можем сделать что-то вроде

- (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 или вы можете просто блокировать определенные ссылки, добавляя else if к if statement. Этот код делает одну из двух вещей: он либо загрузит сайт с щелчком ссылки в UIWebView, либо загрузит сайт в мобильном браузере, если он пройдет if statements.

UPDATE

Оказывается, пользователь не делает objective-c стороны вещей, которые они делают html, который не был в оригинальном вопросе, но так как это может помочь пользователям в будущем я буду оставьте мой ответ здесь.

EDIT

Поскольку пользователь использует html, чтобы попытаться направить пользователя в мобильном браузере, что они ищут называется URL схем. К сожалению, я не верю, что есть какая-либо схема URL-адреса от iOS 7, которая откроет браузер для браузера Safari. Этот вопрос был задан раньше, поэтому я не собираюсь сидеть здесь и говорить все, что снова я просто направить вас на вопрос и ответ Open Mobile Safari from a Link in a WebView

+0

@Downvoter, пожалуйста, оставьте причину для downvote – Popeye

-1
//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; 

} 
Смежные вопросы