跳到主内容

推出新的 iOS WebView

·3 分钟阅读
Facebook 软件工程师

长期以来,Apple 一直不鼓励使用 UIWebView,而推荐使用 WKWebView。在未来几个月将发布的 iOS 12 中,UIWebView 将被正式弃用。React Native 的 iOS WebView 实现严重依赖 UIWebView 类。因此,鉴于这些发展,我们为使用 WKWebView 的 React Native WebView 组件构建了一个新的原生 iOS 后端。

这些更改的尾部已合并到此提交中,并将在 0.57 版本中提供。

要选择使用此新实现,请使用 useWebKit 属性

<WebView
useWebKit={true}
source={{url: 'https://www.google.com'}}
/>

改进

UIWebView 没有合法的方式促进 WebView 中运行的 JavaScript 与 React Native 之间的通信。当从 WebView 发送消息时,我们依赖于一种技巧将其传递给 React Native。简而言之,我们将消息数据编码到具有特殊方案的 URL 中,并将 WebView 导航到该 URL。在原生端,我们拦截并取消了此导航,从 URL 中解析出数据,最后调用 React Native。这种实现容易出错且不安全。我很高兴地宣布,我们已利用 WKWebView 的特性完全取代了它。

WKWebView 相对于 UIWebView 的其他优势包括更快的 JavaScript 执行和多进程架构。有关更多详细信息,请参阅此2014 年 WWDC

注意事项

如果您的组件使用以下属性,那么在切换到 WKWebView 时可能会遇到问题。目前,我们建议您避免使用这些属性

行为不一致

automaticallyAdjustContentInsetscontentInsets (提交)

当您向 WKWebView 添加 contentInsets 时,它不会改变 WKWebView 的视口。视口大小保持与帧相同。而对于 UIWebView,视口大小会实际改变(如果内容内边距为正,则会变小)。

backgroundColor (提交)

使用新的 iOS WebView 实现时,如果您使用此属性,背景颜色可能会出现闪烁。此外,WKWebView 渲染透明背景的方式与 UIWebview 不同。请查看提交描述以获取更多详细信息。

不支持

scalesPageToFit (提交)

WKWebView 不支持 scalesPageToFit 属性,因此我们无法在 WebView React Native 组件上实现此功能。