经过一番Googling之后,我意识到我需要捕获对应用程序链接的请求,并让iOS处理它们。我开始通过查看是否该方案以-webVIEw:shouldStartLoaDWithRequest:navigationType :,“itms”开头,但意识到可能有其他种类的应用程序链接,系统可以处理。所以我想出了这个,而是:
- (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 :,所以有点恼人。
您如何处理此类请求?
解决方法 这是我想出的。在webVIEw:shouldStartLoaDWithRequest:navigationType :,我要求 *** 作系统处理任何非http和非https请求,它可以,像这样:- (BOol)webVIEw:(UIWebVIEw *)wv shouldStartLoaDWithRequest:(NSURLRequest *)request navigationType:(UIWebVIEwNavigationType)navigationType { // Determine if we want the system to handle it. NSURL *url = request.URL; if (![url.scheme isEqual:@"http"] && ![url.scheme isEqual:@"https"]) { if ([[UIApplication sharedApplication]canopenURL:url]) { [[UIApplication sharedApplication]openURL:url]; return NO; } } return YES;}
这工作非常好,除了血腥“帧负载中断”错误。我曾经认为从webVIEw返回false:shouldStartLoaDWithRequest:navigationType:Web视图将不会加载请求,因此将没有错误处理。但即使我返回上面的NO,我仍然“帧加载中断”错误。这是为什么?
无论如何,我假设它可以在-webVIEw中忽略:dIDFailLoaDWithError ::
- (voID)webVIEw:(UIWebVIEw *)wv dIDFailLoaDWithError:(NSError *)error { // Ignore NSURLErrorDomain error -999. if (error.code == NSURLErrorCancelled) return; // Ignore "Fame Load Interrupted" errors. Seen after app store links. if (error.code == 102 && [error.domain isEqual:@"WebKitErrorDomain"]) return; // normal error handling…}
现在iTunes URL工作正常,mailto:s和应用程序链接。
总结以上是内存溢出为你收集整理的iphone – 如何处理UIWebView中的应用程序URL?全部内容,希望文章能够帮你解决iphone – 如何处理UIWebView中的应用程序URL?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)