引入新的 iOS WebViews
长期以来,Apple 一直不鼓励使用 UIWebView,而青睐 WKWebView。在未来几个月将发布的 iOS 12 中,UIWebView 将被正式弃用。React Native 的 iOS WebView 实现严重依赖 UIWebView 类。因此,鉴于这些发展,我们为 WebView React Native 组件构建了一个新的原生 iOS 后端,它使用 WKWebView。
这些更改的最后部分已在此提交中落地,并将随0.57版本发布。
要选择此新实现,请使用useWebKit
prop。
<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
,视口大小实际上会发生变化(如果 content insets 为正,则会变小)。
backgroundColor
(提交)
通过 WebView 的新 iOS 实现,如果您使用此属性,您的背景颜色可能会闪烁。此外,WKWebView
对透明背景的渲染方式与 UIWebview
不同。请查看提交说明以获取更多详细信息。
不支持
scalesPageToFit
(提交)
WKWebView 不支持 `scalesPageToFit` 属性,因此我们无法在 WebView React Native 组件中实现此功能。