导语 WKWebView 是苹果在 WWDC 2014 上推出的新一代 webView 组件,用以替代 UIKit 中笨重难用、内存泄漏的 UIWebView。WKWebView 拥有60fps滚动刷新率、和 safari 相同的 JavaScript 引擎等优势。 简单的适配方法本文不再赘述,主要来说说适配 WKWebView 过程中填过的坑以及善待解决的技术难题。 1、WKWebView 白屏问题 WKWebView 自诩拥有更快的加载速度,更低的内存占用,但实际上 WKWebView 是一个多进程组件
UIWebView是苹果继承于UIView封装的一个加载web内容的类,它可以加载任何远端的web数据展示在你的页面上,你可以像浏览器一样前进后退刷新等操作。不过苹果在iOS8以后推出了WKWebView来加载Web。UIWebView自iOS2就有,WKWebView从iOS8才有,毫无疑问WKWebView是将会逐步取代笨重的UIWebView。且UIWebView存在占用过多内存,js执行效率低等问题。而WKWebView网页加载速度大有提升,占用更少内存。
UIWebView自iOS2就有,WKWebView从iOS8.0(2014年9月WWDC)才有,毫无疑问,WKWebView相对UIWebVIew要优秀得多,主要表现在以下几点:
原文作者:享物说 https://juejin.im/post/5c778d86e51d4506304ee348
前言 在iOS8中,苹果推出了WKWebView。WKWebView有一个突出特点,就是内存占用少。 但作为一个全新的WebView,API相比于之前的UIWebView肯定会有所不同。今天就在这里记录一下WKWebView的基本使用。 Webview的使用,通常包含以下几个部分:浏览器的基本设置,浏览器的各种回调,浏览器中js如何调用原生方法。 WKWebView基本使用 self.webview = [[WKWebView alloc]init]; [self.view addSubvi
之前写过一篇文章是关于基于 NSURLProtocol 做的 DNS 解析,其中对 NSURLProtocol 也有了简单的介绍,我们都知道他可以拦截所有基于 URL Loading System 中的请求,但是对于 WKWebview 里面所发出的请求即使他是 http/https 也无能为力,先来简单的了解下 WKWebView.
在上篇文章中讲述了使用UIWebView拦截URL的方式来处理JS与OC交互。 由于UIWebView比较耗内存,性能上不太好,而苹果在iOS 8中推出了WKWebView。 同样的用WKWebView也可以拦截URL,做JS 与OC交互。关于WKWebView与UIWebView的对比,大家请自动百度或者google。
不错的文章 WKWebView WKWebView是现代 WebKit API 在 iOS 8 和 OS X Yosemite 应用中的核心部分。它代替了 UIKit 中的UIWebView和 AppKit 中的WebView,提供了统一的跨双平台 API。如果你的app只需要支持iOS8.0之后的版本,那么非常建议你使用WKWebView来替代UIWbeView,性能不止提升了一个档次。 坑 关于wkwebivew中点击无响应的问题 WKWebView与js交互 所谓轻应用,简单的来说就是原生应用集成了h
WKWebView WKWebView是现代 WebKit API 在 iOS 8 和 OS X Yosemite 应用中的核心部分。它代替了 UIKit 中的UIWebView和 AppKit 中的WebView,提供了统一的跨双平台 API。如果你的app只需要支持iOS8.0之后的版本,那么非常建议你使用WKWebView来替代UIWbeView,性能不止提升了一个档次。 WKWebView与js交互 所谓轻应用,简单的来说就是原生应用集成了html页面入口,还能通过js与native实现交互,例
1、WKWebView 自诩拥有更快的加载速度,更低的内存占用,但实际上 WKWebView 是一个多进程组件,Network Loading 以及 UI Rendering 在其它进程中执行。初次适配 WKWebView 的时候,我们也惊讶于打开 WKWebView 后,App 进程内存消耗反而大幅下降,但是仔细观察会发现,Other Process 的内存占用会增加。在一些用 webGL 渲染的复杂页面,使用 WKWebView 总体的内存占用(App Process Memory + Other Pr
时至今日,我都在想“微信小程序”为什么不能做成Web式,而是要去加那么一层隔离,终归其原因,还是随着时间向前走,Hybrid的载体也发生了变化,不然该卡的还是一样卡的一逼。从iOS的角度上来说载体从UIWebView变成了WKWebView,Android有着他们自研的X5当然原生的内核,如果你用着Android7.0也不见得会卡,这才是小程序能出来的根本原因,没有载体,一切都是空谈。
前言 我们大前端团队内部 📖每周一练 的知识复习计划继续加油,本篇文章是 《Hybrid APP 混合应用专题》 主题的第二期和第三期的合集。 这一期共整理了 10 个问题,和相应的参考答案,文字和图片较多,建议大家可以收藏,根据文章目录来阅读。 之前分享的每周内容,我都整理到掘金收藏集 📔《EFT每周一练》 上啦,欢迎点赞收藏咯💕💕。 内容回顾: 《EFT 每周分享 —— Hybrid App 应用开发中 5 个必备知识点复习》 《EFT 每周分享 —— HTTP 的15个常
创建WKWebView lazy var webView: WKWebView = { // 创建WKPreferences let preferences = WKPreferences() // 开启js preferences.javaScriptEnabled = true // 创建WKWebViewConfiguration let configuration = WKWebViewConfiguration() // 设置WKWebVie
说起WKWebview代替UIWebview带来的好处你可以举出一堆堆的例子,但说到WKWebview的问题,你绕不过的就是WKWebview cookie和NSHTTPCookieStorage cookie不共享的问题。你可以在网络上搜到如何将他们相互同步的帖子。
概述 WebView就是一个内嵌浏览器控件,在iOS中主要有两种WebView:UIWebView和WKWebView,UIWebView是iOS2之后开始使用,WKWebView是在iOS8开始使用,WKWebView将逐步取代笨重的UIWebView。 相比UIWebView,WKWebView做了如下优化: WKWebView更多的支持HTML5的特性 WKWebView更快,占用内存可能只有UIWebView的1/3 ~ 1/4 WKWebView高达60fps的滚动刷新率和丰富的内置手势 WKWe
UIWebView 是苹果继承于 UIView 封装的一个加载 web 内容的类,它可以加载任何远端的web数据展示在你的页面上,你可以像浏览器一样前进后退刷新等操作。不过苹果在 iOS8 以后推出了 WKWebView 来加载 Web,并应用于 iOS 和 OSX 中,它取代了 UIWebView 和 WebView ,在两个平台上支持同一套 API。
①本文章适合有 UIWebView 基础的人看,如果实在没用过的话,至少你要知道 UIWebView 是个什么东西。
前言 我们大前端团队内部 ?每周一练 的知识复习计划继续加油,本篇文章是 《Hybrid APP 混合应用专题》 主题的第二期和第三期的合集。 这一期共整理了 10 个问题,和相应的参考答案,文字和图
前言: WKWebView 这是在iOS8.0之后增加的一个比UIWebView更加完善和强大的控件!看网上关于它的博客也是有许多的了,从各个方面总结一下这个WKWebView看网上说它主要是为了和JS做好交互产生的,我们也会相应的尝试一下。就先从它基本的说起! 一:和UIWebView相比它的不同处 1:和JS更好的做交互,也支持H5的一些新特性 2:加载进度条(下面会演示) 3:性能高,加载变得更快更可靠 二:从加载一张网页开始 1:使用这个WKWebView是要#import <WebKi
页面禁用长按事件 方式一 禁用长按选择 func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { //页面加载完成时 webView.evaluateJavaScript( "document.documentElement.style.webkitUserSelect='none';", completionHandler: nil ); webView.evaluateJavaScri
前言 我们大前端团队内部 ?每周一练 的知识复习计划继续加油,本篇文章是 《Hybrid APP 混合应用专题》 主题的第二期和第三期的合集。 这一期共整理了 10 个问题,和相应的参考答案,文字和
调用WKWebView的时候,有些页面会打开新的一页,导致WKWebView出现闪退日志:
WKWebView的使用 前言 最近项目中的UIWebView被替换为了WKWebView,因此来总结一下WKWebView的使用。 示例Demo:WKWebView的使用 本文将从以下几方面介绍WKWebView: 1、WKWebView涉及的一些类 2、WKWebView涉及的代理方法 3、网页内容加载进度条的实现 4、JS和OC的交互 5、本地HTML文件的实现 一、WKWebView涉及的一些类 WKWebView:网页的渲染与展示 注意: #import <WebKit/WebKi
上周,业务同学反应,公司的商品详情页,在有的手机上自定义分享信息失效。在自己手机上一直无法重现,在一个同事的手机上也重现了。
上一篇文章介绍了UIWebView 如何通过WebViewJavascriptBridge 来实现JS 与OC 的互相调用,这一篇来介绍一下WKWebView 又是如何通过WebViewJavascriptBridge 来实现JS 与OC 的互相调用的。WKWebView 下使用WebViewJavascriptBridge与UIWebView 大同小异。主要是示例化的类不一样,一些与webView 相关的API调用不一样罢了。
AXWebViewController (0.7.2) 使用了NJKWebViewProgress iOS8.0以下使用了NJKWebViewProgress作为进度条, 因此对于上架审核没有影响。
现在多数项目中会有使用webView的情况,过去往往使用UIWebView解决问题,但是由于其各种不便,给开发者带来了很多麻烦。现在项目中有所使用,所以写一篇总结,方便以后用到了查找和使用也为了方便其他同行。
1.OC与JS交互之UIWebView 创建一个UIWebView 并加载 _webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 20, self.view.frame.size.width, self.view.frame.size.height-20)]; _webView.delegate = self; _webView.scrollView.bounces = NO; / 添加 webiview [self.vie
随着移动互联网的发展,APP 开发模式也在不断的创新,从最初的 Native 开发到后来的 Hybrid 混合开发,再到最近比较火爆的 React Native、Weex 等项目,这些都标志着 APP 开发已经不再是纯 Native 的工作,还要涉及很多跨平台的技术。
根据需求需要将老项目中的 WebView 替换成 WKWebView,期间查阅了不少文档和资料,之前也发布了几篇 WKWebView 相关的优秀文章。
发现H5里面 ajax请求失败302,这可能Cookie丢失或Cookie不相同了
在开发iOS版的直播卖货系统源码过程中,如何在html上展示商品详情,下面小编将从WKWebView入手,来介绍下实现过程。
在QA测试疯狂把玩App时,突然出现了crash问题,而且还是一个概率非常小的偶发crash。吓得我立马跑到bugly上查看crash记录。在通过符号表转换后,我得到了以下crash时的堆栈信息。
代理方法 添加引用 import WebKit 代理 WKNavigationDelegate 页面加载状态的回调 代理方法 func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) { } func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) { } func webView(_ w
PS: 视频播放器不全屏显示 , iOS 10 以下使用 webkit-playsinline 属性
WWDC 15 提出的 ATS (App Transport Security) 是 Apple 在推进网络通讯安全的一个重要方式。在 iOS 9 和 OS X 10.11 中,默认情况下非 HTTPS 的网络访问是被禁止的。当然,因为这样的推进影响面非常广,作为缓冲,我们可以在 Info.plist 中添加NSAppTransportSecurity字典并且将NSAllowsArbitraryLoads设置为YES来禁用 ATS。相信大家都已经对这个非常熟悉了,因为我自己也维护了一些网络相关的框架,所以我还自己准备了一个小脚本来快速关闭 ATS。
最新项目使用网页加载页面的基本上都由UIWebView转到WKWebView了,然后刚刚才发现用了WKWebView之后不会弹窗提示了,查了一下知道原来WKWebView默认禁止了下面的跳转: 打开itunes.apple.com跳转到App Store, 拨打电话, 唤起邮箱等一系列操作 JS的Alert,Confirm,TextInput弹框 解决方法: 首先实现WKUIDelegate代理方法 解决唤不起打电话和跳转系统应用的方法 - (void)webView:(WKWebView *)webV
在iOS8之前,在应用中嵌入网页通常需要使用UIWebView这样一个类,这个类通过URL或者HTML文件来加载网页视图,功能十分有限,只能作为辅助嵌入原生应用程序中。虽然UIWebView也可以做原生与JavaScript交互的相关处理,然而也有很大的局限性,JavaScript要调用原生方法通常需要约定好协议之后通过Request来传递。WebKit框架中添加了一些原生与JavaScript交互的方法,增强了网页视图与原生的交互能力。并且WebKit框架中采用导航堆栈的模型来管理网页的跳转,开发者也可以更加容易的控制和管理网页的渲染。关于UIWebView的相关使用,在前面的博客中有详细介绍,地址如下。
webView初始化:WKPreferences, WKUserContentController -> WKWebViewConfiguration -> WKWebView
随着摒弃了对iOS老系统的支持,项目也开始逐步开始转向WKWebView,本想着新系统应该能填一些WKWebView的坑,结果发现还是还是坑不断,这次在iOS12又遇到一个神坑。
目前,很多在线教育平台中,为了验证课堂的教学效果或学员学习情况,一般都内置了作业系统。学员在上传作业的过程中,有可能会上传多张图片并按序(自下而上)排列,那么这个功能是如何实现的呢?下面小编就以iOS版本的在线教育平台开发为例,来说明下,如何使用WKWebView来实现图片排列。
UIWebView,可通过UIWebViewNavigationTypeBackForward来监听返回事件
1. 使用UIWebView加载百度页面占用内存(92.9M) 01-使用UIWebView加载百度页面占用内存.png 2. 使用WKWebView加载百度页面占用内存(28M) 注意:可
WKWebView 适用于iOS8之后的系统 引用 #import <WebKit/WebKit.h> 1.OC调用JS NSString *jsmethod = [NSString stringWithFormat:@"mymethd(\"%@\")",data]; //data(NSDate)为要传给js的数据 [self.wkWebView evaluateJavaScript:jsmethod completionHandler:^(id _Nullable result,
近日,有朋友问我关于WKWebView与JS的交互问题,可我之前一直使用的是UIWebView,也不曾做过WKWebView的交互啊!接下来大家一块学习下WKWebView是怎么实现原生代码和JS交互的。
这个问题首先你要明白,WKWebView有自己的进程,使用自己的存储空间来存储cookie和cache,WKWebView会忽视NSURLCache、NSHTTPCookieStorage、NSCredentialStorage这些默认的网络存储, 其他的网络类如NSURLConnection是无法访问到的。 同时WKWebView发起的资源请求也是不经过NSURLProtocol的,导致无法自定义请求。
基于Swift 3 、 Xcode 8 、 iOS 10 下的WKWebView的使用。
废话开篇:小程序下有这样的一个概念,就是双引擎,意思就是 UI绘制 跟 JS 执行是在多线程环境下进行的,有人会质疑,JS 不是有异步的方法吗?不管是 setTimeout 还是 promise ,iOS 开发下在主线程开辟异步,其实是将异步任务代码块放到了主队列所有任务的最后执行的,那么,它只是调整了执行顺序,并没有开辟线程。JS 也是一样的,JS 本身就是单线程,那么,上面提到的两种方式并没有真正的开辟线程去执行任务,所以,JS 线程下的任务并没有利用 CPU 多核的优势,所有任务还是在一条线程执行的。那么实现类似小程序双引擎下执行任务的思路就是下面例子要体现的。
问题:由UIWebView切WKWebView后,HTML加载本地HTMLString时,图片无法显示。 WKWebView加强了安全性,不再允许跨域访问,所有跨域地址都失效了,包括不再同一文件夹下的CSS、JS等文件引用。 解决办法: 1、把src中的图片单独读取出来,然后转成Data拼到src中。 2、移动图片存储到tmp中,加载本地Html时设置BaseURL即可(tmp会被定期清理,且无法兼容老版本,弃) 3、启动一个本地服务器,拥有一个读取沙盒的权利(推荐使用) 前面两种就不说
领取专属 10元无门槛券
手把手带您无忧上云