Недавно я обнаружил, что мой UIWebView удушал ссылки ITMS. В частности, из UIWebView в моем приложении, если я перейду на сайт, например этот, и нажмите ссылку "Доступно в магазине приложений", UIWebView будет ошибкой с "Error Domain = WebKitErrorDomain Code = 101 Невозможно показать URL."
После небольшого Googling я понял, что мне нужно уловить запросы на ссылки на приложения и обработать их 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…
}
У меня есть два вопроса:
- Это здорово? Я специально проверяю код ошибки и код ошибки и извлекаю строку URL из userInfo. Возможно, этот материал останется?
- Это работает для связанного с ним связанного хранилища приложений, но когда я переключаюсь обратно в свое приложение, похоже, последовал неудачный запрос с неудачей с "Прерывание кадров". как я могу избавиться от этого? Этого не происходит, когда у меня есть ОС, обрабатывающий запрос от
-webView:shouldStartLoadWithRequest:navigationType:
, так что это немного раздражает.
Как вы обрабатываете такие запросы?