我最近发现我的 UIWebView 在 ITMS 链接上卡住了。具体来说,从我的应用程序中的 UIWebView 中,如果我导航到这样的站点并单击“在 App Store 上可用”链接,UIWebView 会出错,并显示“Error Domain=WebKitErrorDomain Code=101 The URL can't be显示。”
经过一番谷歌搜索,我意识到我需要捕获应用程序链接的请求并让 iOS 处理它们。我开始查看该方案是否以 "itms" in 开头-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…
}
我对此有两个问题:
- 这是理智的吗?我专门检查错误域和错误代码,并从 userInfo 中获取 URL 字符串。那东西可能会留下来吗?
- 这确实适用于上面链接的应用商店链接,但是当我切换回我的应用时,似乎有一个随后失败的请求失败,并出现“帧加载中断”。我怎样才能摆脱它?当我让操作系统处理来自 的请求时,它不会发生
-webView:shouldStartLoadWithRequest:navigationType:
,所以有点烦人。
您如何处理此类请求?