引入新的 iOS WebViews
长期以来,Apple 一直不鼓励使用 UIWebView,转而推荐 WKWebView。在即将在未来几个月发布的 iOS 12 中,UIWebView 将被正式弃用。React Native 的 iOS WebView 实现严重依赖 UIWebView 类。因此,鉴于这些发展,我们为使用 WKWebView 的 WebView React Native 组件构建了一个新的原生 iOS 后端。
这些更改的最后部分已合并到此提交,并且将在 0.57 版本中提供。
要选择加入此新实现,请使用 useWebKit 属性
<WebView
useWebKit={true}
source={{url: 'https://www.google.com'}}
/>
改进
UIWebView 没有合法的方式来促进 WebView 中运行的 JavaScript 与 React Native 之间的通信。当消息从 WebView 发送时,我们依靠一种 hack 方式将其传递给 React Native。简单来说,我们将消息数据编码到一个带有特殊方案的 URL 中,然后将 WebView 导航到该 URL。在原生端,我们拦截并取消了这次导航,从 URL 中解析出数据,最后调用了 React Native。这种实现容易出错且不安全。我很高兴地宣布,我们利用了 WKWebView 的特性来完全取代它。
WKWebView 相较于 UIWebView 的其他优势包括更快的 JavaScript 执行速度和多进程架构。请参阅此 2014 WWDC 以获取更多详细信息。
注意事项
如果您的组件使用以下属性,那么在切换到WKWebView时可能会遇到问题。目前,我们建议您避免使用这些属性
不一致的行为
automaticallyAdjustContentInsets 和 contentInsets (提交)
当您为 WKWebView 添加 contentInsets 时,它不会改变 WKWebView 的视口。视口的大小保持与帧相同。而对于 UIWebView,视口大小实际上会改变(如果内容内边距为正,则会变小)。
backgroundColor (提交)
使用 WebView 的新 iOS 实现,如果您使用此属性,您的背景颜色可能会闪烁显示。此外,WKWebView 渲染透明背景的方式与 UIWebview 不同。请查看提交说明了解更多详情。
不支持
scalesPageToFit (提交)
WKWebView 不支持 `scalesPageToFit` 属性,因此我们无法在 WebView React Native 组件中实现此功能。