WKWebView在WebKit框架中WebKit 是一个开源iOS封装wkwebview的 Web 浏览器引擎iOS封装wkwebview,被广泛用于现代的浏览器开发中它提供了渲染网页执行 JavaScript 代码和处理网络请求等功能在 iOS 和 macOS 开发中,WKWebView 是 WebKit 框架中的一个重要组件,用于在应用程序中嵌入网页内容与传统的 UIWebView 相比,WKWebViewiOS封装wkwebview;iOS存在的h5容器主要包括UIWebView和WKWebView,下面我们就分别来说说他们的用法和优劣二UIWebView的基本用法21加载网页 UIWebView *webView = UIWebView alloc initWithFrame webViewdelegate = self selfview addSubviewwebView 网络地址 NSURL *url = NSURL allociOS封装wkwebview;在 iOS 应用程序中使用 WKWebView 加载 H5 页面时,你可以通过与 JavaScript 交互的方式,实现拍摄照片并将处理后的照片返回给 H5 页面以下是基本的步骤创建 WKWebView 并加载 H5 页面在你的 iOS 应用程序中创建一个 WKWebView 实例,并使用 loadHTMLString 或 loadRequest 方法加载 H5 页面iOS封装wkwebview;设计框架时,需要明确Native和前端的分工,Native提供宿主环境,封装WebView,并提供Bridge方法Header组件设计以及底层的预加载和缓存机制框架的业务逻辑由前端团队负责本文将聚焦WebViewBridgeHeader的设计,后续文章将跟进账号信息设计预加载和缓存的实现在iOS8及之后版本,苹果推出了WKWebView。
Apple推出WKWebView已经有一段时间了,相对于UIWebView而言,内存占用只有UIWebView的一半左右,但是响应速度和效率上却是UIWebView的两倍#8195#8195总结WKWebView使用方法的帖子文章很多,这里不再赘述,这里重点总结一下cookies共享问题由于以上原因,导致WKWebView无法与App自身的CookiesUIWebView之间;在 iOS 中使用 WKWebView 加载 H5 页面时,如果需要在 H5 页面中调用设备的摄像头进行拍照或选择照片进行处理,并将处理后的结果返回给 H5 页面,可以通过以下步骤实现在 iOS 原生代码中,创建一个与 H5 页面交互的 JavaScript 调用接口可以使用 WKWebView 的 WKScriptMessageHandler 协议来实现这;iOS8以后,ios sdk新增了一个WKWebView,用来替换UIWebViewWKWebView相比UIWebView有更多的优点所以意思就是以前微信用的UIWebView显示网页,现在改成了用WKWebView;WKWebView API对比 提供多种API用于执行JS代码,包括通过WKUserScript注入代码与evaluateJavaScript方法evaluateJavaScript方法用于页面加载后的操作,而WKUserScript则提供更灵活的注入时机控制处理回调 提供基础的调用处理,如刷新和关闭页面通过封装回调事件对象,交由外界处理,以增加灵活性和信息传递通信;1在刷新的js函数中添加代码你的标识字符postMessagedata如data data是需要传递的数据,可以是字典,数组等,也可以是字符串 2在iOS端实现WKWebView的代理WKScriptMessageHandler 3在代理方法 voida;在iOS17中,使用Safari调试wkWebView时,发现无法再通过此方式操作,原本以为是苹果的bug然而,经过一段时间的等待后,问题依然未得到解决深入研究后发现,这实际上是为了增强安全性的限制措施解决方法是在wkWebView的配置中加入`isInspectable`属性,并将其设置为`true`默认情况下,该值为`false`。
目前iOS项目中 Webview 几乎都会用到,iOS 8 之前使用UIWebView,iOS 8 之后 Apple 就不推荐使用了,目前已经放弃了,如果项目中存在就无法上架了,需要转为WKWebView了,说实话 UIWebView 是有性能上的缺陷,内存优化不够友好等,但是不得不说这是老的iOS开发人员用的最熟练熟悉的了,用起来得心应;由于iOS的WkWebview对windowopen方法进行了安全限制,即调用该方法,不会起到作用解放方法当触发windowopen方法时,会触发代理WKUIDelegate中的createWebViewWithConfiguration 然后,我们就可以在这个方法中进行处理了需要设置这个代理 webViewUIDelegate = self参考;一导入相关头文件设置相关代理和属性 二WKWebView初始化 注意楼主遇到的第一个坑如果JS给OC传值为空,必须写成 postMessagenull,如果什么都不写,方法是调不通的1在viewWillAppear中配置, addScriptMessageHandler name quot这里就是JS的方法,方法名必须统一quot楼主遇到的第二个坑;结论兼容性 WKWebView = flutter_webview UIWebView UIWebView 速度相比较 WKWebView 稍快一点,但是内存是一大硬伤,所以只要条件允许,就不推荐使用了 WKWebView 速度略慢一点,不过差别不大,总体可以接受是比UIWebView更好的选择,推荐使用 flutter_webView_plugin 在iOS中使。
另一种现象是 webViewtitile 会被置空, 因此,可以在 viewWillAppear 的时候检测 webViewtitle 是否为空来 reload 页面综合以上两种方法可以解决绝大多数的白屏问题iOS WKWebView与JS交互 WKWebView 拦截网络请求 离线化。
发表评论