【问题标题】:React Native stop WebView reloading when app comes to foreground当应用程序进入前台时,React Native 停止 WebView 重新加载
【发布时间】:2018-11-07 17:24:21
【问题描述】:

我正在开发一个使用 WebView 作为应用主屏幕的 React Native 应用。

当应用从后台转到前台时,WebView 会重新加载。如何停止重新加载?

这个answer 建议在ViewDidLoad() 而不是ViewDidAppear()ViewWillAppear() 中加载WebView。这是一个真正的解决方案吗?如何确认或更改 React Native 加载 WebView 的方式?

作为一个 hacky 解决方案,我使用 onNavigationStateChange 将当前 URL 保存在 AsyncStorage 中,然后在应用程序进入前台时加载此 URL。这个解决方案不是很好,因为它:

  1. 打破浏览器历史记录,影响 javascript 后退按钮
  2. 不记得表单状态
  3. 可能会将用户发送到他们无法直接访问的页面,从而导致他们被发送到 404

所以我更喜欢停止重新加载的解决方案,至少在应用只是暂时处于后台的情况下。

【问题讨论】:

  • 我认为 Webview 在进入前台时并不意味着重新加载。在我的 RN 应用程序中,我们使用 WKWebView 并且页面在来自后台时保持加载状态。当应用程序唤醒时,您的状态可能会发生变化,这会导致包含 WebView 的组件重新呈现。您可以尝试添加一个 should ComponentUpdate 以确保 WebView 仅在需要时重新呈现。
  • 谢谢@needsleep,你是对的。我的问题是由 React Navigation SwitchNavigator 引起的,它“在您切换时将路由重置为默认状态”。此重置导致 WebView 重新加载。

标签: react-native webview uiwebview wkwebview


【解决方案1】:

这不是 WebView 的问题。重新加载是由于我误用了React NavigationSwitchNavigator。如docsSwitchNavigator 中所述

当你离开时将路由重置为默认状态

此重置导致 WebView 重新加载。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多