Как обрабатывать URL-адреса приложений в UIWebView?

Недавно я обнаружил, что мой UIWebView захлебывается ссылками ITMS. В частности, из UIWebView в моем приложении, если я перейду на такой сайт, как этот , и щелкну ссылку «Доступно в App Store», UIWebView выдаст ошибку «Error Domain = WebKitErrorDomain Code = 101. Невозможно отобразить URL-адрес ".

Немного погуглив, Я понял, что мне нужно перехватывать запросы на ссылки приложений и заставить iOS обрабатывать их. Я начал с того, что посмотрел, начинается ли схема с «itms» в -webView: shouldStartLoadWithRequest: navigationType: , но понял, что могут быть и другие виды ссылок на приложения, которые система может обрабатывать. Поэтому вместо этого я придумал следующее:

- (void)webView:(UIWebView *)wv didFailLoadWithError:(NSError *)error {
    // Give iOS a chance to open it.
    NSURL *url = [NSURL URLWithString:[error.userInfo objectForKey:@"NSErrorFailingURLStringKey"]];
    if ([error.domain isEqual:@"WebKitErrorDomain"]
        && error.code == 101
        && [[UIApplication sharedApplication]canOpenURL:url])
    {
        [[UIApplication sharedApplication]openURL:url];
        return;
    }

    // Normal error handling…
}

У меня есть два вопроса по этому поводу:

  1. Это разумно? Я специально проверяю домен ошибки и код ошибки и извлекаю строку URL из userInfo. Этот материал, вероятно, останется?
  2. Это работает для указанной выше ссылки на магазин приложений, но когда я переключаюсь обратно в свое приложение, похоже, что последовал неудачный запрос, который завершился ошибкой с сообщением «Загрузка кадра прервана». как я могу от этого избавиться? Это не Такое бывает, когда у меня есть операционная система, обрабатывающая запрос от -webView: shouldStartLoadWithRequest: navigationType: , поэтому это немного раздражает.

Как вы обрабатываете такие запросы?

61
задан theory 28 November 2010 в 22:10
поделиться