全新 iOS WebView 组件发布
本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →
长期以来,Apple 一直建议开发者使用 WKWebView 替代 UIWebView。在即将发布的 iOS 12 中,UIWebView 将被正式弃用。由于 React Native 的 iOS WebView 实现重度依赖 UIWebView 类,基于这些变化,我们为 WebView React Native 组件开发了全新的 iOS 原生后端,采用 WKWebView 实现。
这些变更的最终代码已通过 此提交 合并,将在 0.57 版本中发布。
要启用这个新实现,请使用 useWebKit 属性:
<WebView
useWebKit={true}
source={{url: 'https://www.google.com'}}
/>
改进亮点
UIWebView 原本缺乏有效机制来实现 WebView 内运行的 JavaScript 与 React Native 之间的通信。当消息从 WebView 发送时,我们依赖一种变通方案进行传递:先将消息数据编码到特殊协议的 URL 中,再导航 WebView 至该 URL。在原生端,我们拦截并取消此导航,解析 URL 中的数据,最终调用 React Native。这种实现方式不仅容易出错且存在安全隐患。很高兴向大家宣布,我们现已利用 WKWebView 的特性完全重构了此机制。
WKWebView 相较于 UIWebView 的其他优势包括更快的 JavaScript 执行速度和多进程架构。更多细节请参考 2014 年 WWDC。
注意事项
如果您的组件使用了以下属性,切换到 WKWebView 时可能会遇到问题。目前建议避免使用这些属性:
行为不一致:
automaticallyAdjustContentInsets 和 contentInsets (提交记录)
向 WKWebView 添加 contentInsets 时,WKWebView 的视口(viewport)尺寸不会改变,仍保持与框架相同的尺寸。而 UIWebView 的实际视口尺寸会发生变化(当内容边距为正数时视口会缩小)。
backgroundColor (提交记录)
使用新的 iOS WebView 实现时,此属性可能导致背景色出现闪烁现象。此外,WKWebView 与 UIWebview 渲染透明背景的方式存在差异,具体细节请查看提交说明。
不受支持:
scalesPageToFit (提交记录)
由于 WKWebView 本身不支持 scalesPageToFit 属性,我们无法在 React Native 的 WebView 组件中实现此功能。