iOS WKWebView无法处理URL Scheme和App Store链接的问题解决

 更新时间:2018年03月25日 09:58:50   作者:KANGZUBIN  
这篇文章主要给大家介绍了关于iOS WKWebView无法处理URL Scheme和App Store链接的问题解决的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。

WKWebView简介

UIWebView自iOS2就有,WKWebView从iOS8才有,毫无疑问WKWebView将逐步取代笨重的UIWebView。通过简单的测试即可发现UIWebView占用过多内存,且内存峰值更是夸张。WKWebView网页加载速度也有提升,但是并不像内存那样提升那么多。

下面列举一些其它的优势:

      1、更多的支持HTML5的特性

      2、官方宣称的高达60fps的滚动刷新率以及内置手势

      3、Safari相同的JavaScript引擎,且允许JavaScript的Nitro库加载并使用(UIWebView中限制);

      4、将UIWebViewDelegate与UIWebView拆分成了14类与3个协议(官方文档说明)

      5、占用更少的内存,在性能、稳定性、功能方面有很大提升(最直观的体现就是加载网页是占用的内存,模拟器加载百度与开源中国网站时,WKWebView占用23M,而UIWebView占用85M);

另外用的比较多的,增加加载进度属性:estimatedProgress

iOS WKWebView无法处理URL Scheme和App Store链接解决方法

之前使用 UIWebView 时,当遇到 App Store 下载链接,例如:

https://itunes.apple.com/cn/app/id414478124?mt=8

在 UIWebView 中点击可以自动打开 iPhone 本地 App Store 并跳转到相应 App 的下载页面,

但是当换成 WKWebView 时,我们发现点击 App Store Links 时,有时候无反应,有时则会打开相应 App 的 App Store Web 页面,而不会直接调起本地 App Store。

另外,对于自定义的 URL Scheme 类型链接,在 WKWebView 里直接点击则会报错:Error Domain=NSURLErrorDomain Code=-1002 "unsupported URL";

所以我们需要在 WKWebView 即将加载某一 URL 时,对这两种情况做一下处理,修改 WKWebView 的 delegate 中的 webView:decidePolicyForNavigationAction:decisionHandler: 方法,当遇到上述两种链接时,我们交给系统的 [[UIApplication sharedApplication] openURL:xxx] 来处理即可,代码如图如下:

- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
 NSURL *url = navigationAction.request.URL;
 NSString *urlString = (url) ? url.absoluteString : @"";
 // iTunes: App Store link
 // 例如,微信的下载链接: https://itunes.apple.com/cn/app/id414478124?mt=8
 if ([urlString containsString:@"//itunes.apple.com/"]) {
  [[UIApplication sharedApplication] openURL:url];
  decisionHandler(WKNavigationActionPolicyCancel);
  return;
 }
 
 // Protocol/URL-Scheme without http(s)
 else if (url.scheme && ![url.scheme hasPrefix:@"http"]) {
  [[UIApplication sharedApplication] openURL:url];
  decisionHandler(WKNavigationActionPolicyCancel);
  return;
 }
 decisionHandler(WKNavigationActionPolicyAllow);
}

关于使用 WKWebView 的更多 Tips,可以参考:https://github.com/ShingoFukuyama/WKWebViewTips

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • iOS UIWebView实现禁止用户复制剪切功能

    iOS UIWebView实现禁止用户复制剪切功能

    这篇文章主要给大家介绍了iOS中的UIWebView如何实现禁止用户复制剪切的功能,文中给出了详细的示例代码,有需要的朋友们可以参考借鉴,下面来一起学习学习吧。
    2016-11-11
  • 谈一谈iOS单例模式

    谈一谈iOS单例模式

    这篇文章主要和大家谈一谈iOS中的单例模式,单例模式是一种常用的软件设计模式,想要深入了解iOS单例模式的朋友可以参考一下
    2016-05-05
  • IOS CocoaPods详细使用方法

    IOS CocoaPods详细使用方法

    自从有了CocoaPods以后,这些繁杂的工作就不再需要我们亲力亲为了,只需要我们做好少量的配置工作,CocoaPods会为我们做好一切
    2016-09-09
  • iOS 定制多样式二维码

    iOS 定制多样式二维码

    最常见的二维码功能包括信息获取、网站跳转、电商交易、手机支付等等,其拥有密度小、信息容量大、容错能力强、成本低、制作难度低等优点。在移动开发中,二维码的地位也越来越重要,掌握二维码的基本操作是重要的本领之一。本文将讲解iOS定制二维码的步骤与方法。
    2017-03-03
  • IOS NSNotification 键盘遮挡问题的解决办法

    IOS NSNotification 键盘遮挡问题的解决办法

    这篇文章主要介绍了IOS NSNotification 键盘遮挡问题的解决办法的相关资料,希望通过本文能帮助到大家,解决这样的问题,需要的朋友可以参考下
    2017-09-09
  • Flutter Widgets粘合剂CustomScrollView NestedScrollView滚动控件

    Flutter Widgets粘合剂CustomScrollView NestedScrollVie

    这篇文章主要为大家介绍了Flutter Widgets粘合剂CustomScrollView NestedScrollView滚动控件示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • 详解iOS开发中UItableview控件的数据刷新功能的实现

    详解iOS开发中UItableview控件的数据刷新功能的实现

    这篇文章主要介绍了详解iOS开发中UItableview控件的数据刷新功能的实现,代码基于传统的Objective-C,需要的朋友可以参考下
    2015-12-12
  • IOS实现左右两个TableView联动效果

    IOS实现左右两个TableView联动效果

    在我们日常开发IOS中,经常见到两个tableview的联动,滑动一侧tableview,另一侧tableview跟着滑动,其实实现起来比较简单,只是需要搞清楚他们之间的区别和联系,下面一起来看看如何实现。
    2016-08-08
  • iOS 报clang: error: no input files错误的解决方法

    iOS 报clang: error: no input files错误的解决方法

    这篇文章主要给大家介绍了关于iOS报clang: error: no input files错误的解决方法,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-01-01
  • 详解iOS App中UiTabBarController组件的基本用法

    详解iOS App中UiTabBarController组件的基本用法

    UiTabBarController组件即是用来创建App中的Tab视图切换选项栏,下面将详解iOS App中UiTabBarController组件的基本用法,包括左右滑动切换标签页等基本功能的实现,需要的朋友可以参考下
    2016-05-05

最新评论