Разбор URL, чтобы отображались только ссылки, открытые во внешнем приложении из UIWebView? - PullRequest
0 голосов
/ 07 октября 2011

У меня есть веб-контент внутри UIWebView в моем приложении. Моя цель состоит в том, чтобы все ссылки нормально открывались внутри приложения, но любые ссылки, начинающиеся с "http://maps",, открываются в safari, поэтому их можно, в свою очередь, открывать во внешнем приложении iphone maps. Если у вас есть решение этой проблемы, остановитесь читая сейчас, ниже я собираюсь предложить свое решение. В настоящее время все ссылки открыты внутри приложения, поэтому http://maps ссылки открываются на m.google.com внутри приложения. Решение, о котором я думаю, заключается в следующем код, который использует openURL для открытия всех ссылок в сафари:

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

Очевидно, что проблема с этим кодом в том, что все ссылки открываются в Safari, а я хочу только ссылки на карту. Можете ли вы предложить способ разбора по ссылкам и пропустить через функцию только те, которые начинаются с http://maps? Также более простой вопрос, как мне делегировать UIWebView, чтобы я мог запустить этот код, а также является ли viewcontroller.m подходящим местом для размещения этого кода?

Если вы, ребята, могли бы предложить целую функцию, включая приведенную выше часть openURL и разбор ссылок, чтобы убедиться, что через функцию передаются только ссылки карт, что было бы здорово. Опять же, если у вас есть другое решение или обходной путь, я хотел бы услышать это. Большое спасибо за вашу помощь, stackoverflow был спасителем, я почти закончил свой первый проект!

Ответы [ 2 ]

5 голосов
/ 07 октября 2011

Попробуйте что-то вроде этого:

-(BOOL)webView:(UIWebView *)inWeb
shouldStartLoadWithRequest:(NSURLRequest *)request
navigationType:(UIWebViewNavigationType)inType {
  // let UIWebView deal with non-click requests
  if (inType != UIWebViewNavigationTypeLinkClicked) {
    return YES;
  }

  // URL starts with "http://maps"?
  if ([[request.URL description] hasPrefix:@"http://maps"]) {
    // open URL in Safari and return NO to prevent UIWebView from load it
    [[UIApplication sharedApplication] openURL:[request URL]];
    return NO;
  }

  // otherwise let UIWebView deal with the request
  return YES;
}
0 голосов
/ 07 октября 2011
 NSString *linkPath = [[request url] path];
 if ([linkPath hasPrefix:@""http://maps"]) {

    //open in safari

 }
 else {
  //do whatever

 }
...