前言 在iOS8中,苹果推出了WKWebView。WKWebView有一个突出特点,就是内存占用少。 但作为一个全新的WebView,API相比于之前的UIWebView肯定会有所不同。...WKWebView的设置 WKWebView的主要设置项都在configuration成员中(比如是否允许浏览器手指缩放,h5的浏览器能否自动播放等)这些都属于浏览器本身的设置项。...WKNavigationDelegate 如命名,这个是WKWebView的导航的代理。它控制了WKWebView在加载一个页面流程中的各个关键时间节点的。...相当于WKWebView加载的生命周期方法。...此方法的本质是,js会尝试加载某个URL,客户端在加载前拦截这个URL,通过解析这个URL识别它的内容,调用相应的原生方法,并阻上浏览器加载这个URL。
在上篇文章中讲述了使用UIWebView拦截URL的方式来处理JS与OC交互。 由于UIWebView比较耗内存,性能上不太好,而苹果在iOS 8中推出了WKWebView。...如果在HTML中要使用alert等弹窗,就必须得实现UIDelegate的相应代理方法。 3.在iOS 9之前,WKWebView加载本地HTML会有一些问题。...(不能加载本地HTML,或者部分CSS/本地图片加载不了等) 我这里创建WKWebView的示例代码是这样的: WKWebViewConfiguration *configuration = [...2.拦截URL 使用WKNavigationDelegate中的代理方法,拦截自定义的URL来实现JS调用OC方法。...代表允许加载,相当于UIWebView的代理方法中 return YES的情况。
概述 WebView就是一个内嵌浏览器控件,在iOS中主要有两种WebView:UIWebView和WKWebView,UIWebView是iOS2之后开始使用,WKWebView是在iOS8开始使用,...其加载数据的方式有三种: 第一种: - (void)loadRequest:(NSURLRequest *)request; 这是加载网页最常用的一种方式,通过一个网页URL来进行加载,这个URL可以是远程的也可以是本地的...WKWebView是iOS8中出的一个新控件,算是对UIWebVeiw的升级版。...例如,使用WKWebView加载百度首页。...都有,WKWebView多了一个加载文件方法,而且WKWebView的这些加载方法都有返回值。
不错的文章 WKWebView WKWebView是现代 WebKit API 在 iOS 8 和 OS X Yosemite 应用中的核心部分。...它代替了 UIKit 中的UIWebView和 AppKit 中的WebView,提供了统一的跨双平台 API。...类里进行代理设置 简单的wkwebview的代理 页面开始加载时调用 - (void...-- %@",__FUNCTION__, webView.URL); } 当内容开始返回时调用 - (void)webView:(WKWebView*)webView didCommitNavigation...:(WKNavigation*)navigation { NSLog(@"%s",__FUNCTION__); } 页面加载完成之后调用 - (void)webView:(WKWebView
{ //页面加载完成时 webView.evaluateJavaScript( "document.documentElement.style.webkitUserSelect='none...self.webouterView.addSubview(myWebView) myWebView.autoresizingMask = UIView.AutoresizingMask.flexibleWidth let web_url...= URL.init(string: weburl) myWebView.load(URLRequest.init(url: web_url!))...{ //页面开始加载,可在这里给用户loading提示 self.showNoticeWait(text: "加载中..."); } func webView(_ webView: WKWebView..., withError error: Error) { //页面加载出错,可在这里给用户错误提示 } func webView(_ webView: WKWebView, didReceiveServerRedirectForProvisionalNavigation
WKWebView WKWebView是现代 WebKit API 在 iOS 8 和 OS X Yosemite 应用中的核心部分。...它代替了 UIKit 中的UIWebView和 AppKit 中的WebView,提供了统一的跨双平台 API。...页面开始加载时调用 - (void)webView:(WKWebView*)webView didStartProvisionalNavigation:(WKNavigation*)navigation...{ NSLog(@"%s -- %@",__FUNCTION__, webView.URL); } 当内容开始返回时调用 - (void)webView:(WKWebView*)webView..._); } 加载失败时调用 - (void)webView:(WKWebView*)webView didFailProvisionalNavigation:(WKNavigation*)navigation
WKWebView 几个不常用的特性 WKWebview 加载过程中的性能指标图解 WKWebview 秒开的实践及踩坑之路 今天分享的这篇文章全面的介绍了 WKWebView,作者根据开发和使用经验从属性...*initialURL; 其中 initialURL 和 URL 的区别: initialURL 为本次网页加载的初始请求 URL 为本次网页加载结束后的最终请求 两者 URL 区别在于首次发起 302...WKWebView 属性 webView 属性 title: 网页的标题,一般为 html 中的 中的内容 URL: 网页的URL地址,为最终加载的地址 loading:...网页是否处于加载中,YES 加载中、 NO 加载完成 estimatedProgress: 网页加载进度 hasOnlySecureContent: 网页上的所有资源是否已通过 https 加载 serverTrust...FAQ WKWebView 中 H5 css 动画失效的问题?
"]; 4.WKUIDelegate wkwebview.UIDelegate属性 用户js中调用alert,confirm,prompt,如果不适配则无法使用对应js功能,估计是安全问题,因为使用中有的会采用这个作为...为了兼容iOS8的js通信,也可以在这里拦截url做bridge分发 - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction...cachePolicy:cachePolicy timeoutInterval:0]; 然后发起请求 [self.wkWebView loadFileURL:request.URL allowingReadAccessToURL..."file:///"头部替换 4.加载源代码 直接把html文件读出来以后,以页面内容方式去读取 [self.wkWebView loadHTMLString:htmlString baseURL:nil...]; 5.离线资源包的一点思考 利用离线加载这一特性,我们可以通过服务端资源打包成本地资源包(zip包),通过服务器比对方式下载资源包,解压后放在本地指定的沙盒目录,随后通过wkwebview加载本地方式打开页面
客户服务器模型 App 通过一个 URL 向特定的主机发送一个网络请求加载需要的资源。...print(url) // URL中文转码 print(url.removingPercentEncoding!) // URL中文解码 有时候只需要对URL中的中文处理,而不需要针对整个URL。...// 创建WKWebView let webView = WKWebView(frame: UIScreen.main.bounds) // 加载网页 webView.load(request) 加载本地资源...JavaScript 调用 WKWebView: // Swift方法,可以在JavaScript中调用 func userContentController(_ userContentController...WKWebView ... // 加载本地html let html = try!
requestWithURL:url]; // 3.加载请求 [self.webView loadRequest:request]; UIWebView delegate 协议方法 //网页即将开始加载...创建一个WKWebView 并加载 self.webView = [[WKWebView alloc]initWithFrame:CGRectMake(0, 20, kScreenWidth, kScreenHeight...loadRequest:request]; WKWebView中的三个代理方法 1 WKNavigationDelegate // 页面开始加载时调用 - (void)webView:(WKWebView...*)webView didCommitNavigation:(WKNavigation *)navigation; // 页面加载完成之后调用 - (void)webView:(WKWebView...*)webView didFinishNavigation:(WKNavigation *)navigation; // 页面加载失败时调用 - (void)webView:(WKWebView
iOS中WebKit框架应用与解析 一、引言 在iOS8之前,在应用中嵌入网页通常需要使用UIWebView这样一个类,这个类通过URL或者HTML文件来加载网页视图,功能十分有限,只能作为辅助嵌入原生应用程序中...iOS9后可用 config.applicationNameForUserAgent = @"HS"; 四、WKWebView中的属性和方法解析 下面列举了WKWebView中常用的属性和方法...@property (nullable, nonatomic, readonly, copy) NSURL *URL; //网页是否正在加载中 @property (nonatomic, readonly...{ } //主页加载完成时调用 -(void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation{...:(NSError *)error{ } //主页数据加载发生错误时调用 -(void)webView:(WKWebView *)webView didFailProvisionalNavigation
一:和UIWebView相比它的不同处 1:和JS更好的做交互,也支持H5的一些新特性 2:加载进度条(下面会演示) 3:性能高,加载变得更快更可靠 二:从加载一张网页开始 1:使用这个WKWebView...:(WKNavigation *)navigation { NSLog(@"页面开始加载"); } // 加载内容 -(void)webView:(WKWebView *)webView...WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation { NSLog(@"页面加载完成"); } // 页面加载失败...:(NSError *)error { NSLog(@"页面加载失败"); } // 接收到服务器重新配置请求之后再执行 -(void)webView:(WKWebView *)webView...[18155:211964] 页面加载完成 * */ // API是根据客户端受到的服务器响应头以及response相关信息来决定是否可以跳转 -(void)webView:(WKWebView *
: self.url) webView.load(request) // 不能用 webView.loadHTMLString(self.url.absoluteString, baseURL: self.url...{ print("加载完成: didFinish") self.title = webView.title } // MARK: - 加载失败 func webView(_...{ print("即将完成: didCommit") } // MARK: - 加载错误 func webView(_ webView: WKWebView, didFailProvisionalNavigation...是因为加载网页的方法用的不对: 我用了: webView.loadHTMLString(_ string: String, baseURL: URL?)..., "莫小言") } // 无参数函数 function testA() { alert("我是JS中的弹窗消息
Hybrid APP 框架 一个完整的 Hybrid APP 框架主要包括 WebView 容器、Bridge、UI、预加载、缓存等模块儿,当然 Bridge、预加载、缓存等也需要相应前后端的支持,比如发布平台...本文主要对 WebView、Bridge、Header 设计进行介绍,后续文章会对账号信息设计、预加载和缓存进行持续跟进。...本套框架的预加载和缓存模块儿需要借助 NSURLProtocol 实现,所以这里还是优先使用 UIWebView(想吐个槽,其实如果预加载和缓存这套系统做好以后,UIWebView 的效果并没不比 WKWebView...差),这里也不能把 WKWebView 一棒子打死不用,对于那些对无需预加载和缓存的页面,可以为前端提供参数(比如 wkwebview=true)让前端自己的去选择是否使用 WKWebView,所以这里需要对...hybrid_params={params need encode}&callback=callback_ID 客户端需要根据约定,在 Bridge 处理结束后通过 WebView window 对象中的
(在 iOS 中使用的是 WKWebView)的加载速度,内存使用情况。...: widget.url, clearCache: true, appCacheEnabled: false, . . .); 下面使笔者进行 10 次测试所得到的数据:...> UIWebView > flutter_webview 占用内存对比 这里查看内存使用的是 Xcode 的 debug session 中的 memory,首先看之前测试时,连续打开十次新浪的内存情况...结论:内存 WKWebView > flutter_webview > UIWebView HTML5 兼容性对比 可以在 html5test 中对浏览器的兼容性进行评分,通过测试发现得分分别如下: 因为...如果是混编项目中,因为它被包了一层,所以页面加载上存在一定的劣势,所以混编项目中仍然推荐使用 WKWebView。
,我对于他的理解,苹果在iOS8中推出的新框架“Webkit”,其中WKWebView就是用来替换原来的UIWebView,一句话,你用它原来UIWebView出现的各种问题都被解决了。...当然随之而来的会有一些小问题,比如:WKWebView是一个独立进程,那么它的请求就无法通过系统的URL SYSTEM了,你无法像UIWebView一样,可以通过NSURLProtocol来拦截所有的请求...至于你想到的如何加载网页,其实很简单,一个load而已。 self.wkWebView?....我们知道WKWebView是一个独立的进程,它的请求都不经过系统的URL SYSTEM,我们很难拦截它,该怎么办?..., withError error: Error) { // 页面加载错误 print(error) } 每一个delegate实现中你都应该去做一条日志的记录或者是页面加载完成时间
1、WKWebView 自诩拥有更快的加载速度,更低的内存占用,但实际上 WKWebView 是一个多进程组件,Network Loading 以及 UI Rendering 在其它进程中执行。...初次适配 WKWebView 的时候,我们也惊讶于打开 WKWebView 后,App 进程内存消耗反而大幅下降,但是仔细观察会发现,Other Process 的内存占用会增加。...在一些用 webGL 渲染的复杂页面,使用 WKWebView 总体的内存占用(App Process Memory + Other Process Memory)不见得比 UIWebView 少很多。...在 WKWebView 中加载下面的测试链接可以稳定重现白屏现象: http://people.mozilla.org/~rnewman/fennec/mem.html 这个时候 WKWebView.URL...[webView reload](这个时候 webView.URL 取值尚不为 nil)解决白屏问题。
,前者是用来处理webView加载视图的各种情况的,后者是主要用来处理交互事件的。...,将后面的URL构建部分挪到顶上分出来写。...基本代理相关 常用的有: //开始加载 -(void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *...)navigation //加载完成 -(void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation...:(NSError *)error //加载报错,通常来说如果页面出现不存在等问题,会走这里,如果需要对空白页面进行处理,在这里处理 - (void)webView:(WKWebView *)webView
示例Demo:WKWebView的使用 本文将从以下几方面介绍WKWebView: 1、WKWebView涉及的一些类 2、WKWebView涉及的代理方法 3、网页内容加载进度条的实现 4、JS...涉及的代理方法 WKNavigationDelegate :主要处理一些跳转、加载处理操作 // 页面开始加载时调用 - (void)webView:(WKWebView *)webView...didStartProvisionalNavigation:(WKNavigation *)navigation { } // 页面加载失败时调用 - (void)webView:(WKWebView...,需要在block中把用户选择的情况传递进去 - (void)webView:(WKWebView *)webView runJavaScriptConfirmPanelWithMessage:(NSString...需要在block中把用户输入的信息传入 - (void)webView:(WKWebView *)webView runJavaScriptTextInputPanelWithPrompt:(NSString
在iOS中,加载网页目前有两种控件:UIWebView和WKWebView。...2,WKWebView拥有与Safari中相同的Nitro JavaScript引擎,大大提高了页面JS执行速度;但是UIWebView不支持Nitro JavaScript引擎,所以加载较慢。...页面标题 URL。活动网址 customUserAgent。自定义用户代理字符串 设置委托 navigationDelegate UIDelegate 加载内容 estimatedProgress。...创建并初始化一个WKWebView 设置WebView的navigationDelegate、UIDelegate、configuration等 加载URL或者HTML字符串 在相应的代理方法回调中处理业务逻辑..., 6,上面讲到,我们可以使用KVO来监听WKWebView的estimatedProgress属性值的变化来实现加载进度条,那么WKWebView中还有那些属性值的变化也是可以被KVO监听到的呢?
领取专属 10元无门槛券
手把手带您无忧上云