iphone – 如何处理UIWebView中的应用程序URL?

iphone – 如何处理UIWebView中的应用程序URL?,第1张

概述我最近发现我的UIWebView是阻塞在ITMS链接。具体来说,从我的应用程序中的UIWebView,如果我导航到一个网站,如 this one,并单击“在App Store上可用”链接,UIWebView将错误与“错误域= WebKitErrorDomain代码= 101无法显示该URL “。 经过一番Googling之后,我意识到我需要捕获对应用程序链接的请求,并让iOS处理它们。我开始通过查 我最近发现我的UIWebVIEw是阻塞在ITMS链接。具体来说,从我的应用程序中的UIWebVIEw,如果我导航到一个网站,如 this one,并单击“在App Store上可用”链接,UIWebVIEw将错误与“错误域= WebKitErrorDomain代码= 101无法显示该URL “。

经过一番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?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1047654.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存