NgRx 存储运行时检查 NgZone 在 android 上失败

NgRx store runtime check NgZone failing on android

我们实施了网络检查作为 window 事件在线和离线的副作用。

online$ = createEffect(() => {
  return fromEvent(window, 'online').pipe(mapTo(NetworkActions.deviceOnline()));
});

这在桌面 Chrome 和 iOS Safari 中工作正常,但不知何故导致 strictActionWithinNgZone 运行时检查 Android:

    {
      "state": {
        "keyboard": {
          "isKeyboardOpen": false
        },
        "network": {
          "isDeviceOnline": true
        }
      },
      "error": "Error: Action '[Network] Device Online' running outside NgZone. https://ngrx.io/guide/store/configuration/runtime-checks#strictactionwithinngzone"
    },

有没有人知道为什么这只发生在 Android 中,为什么它甚至是一个问题?

编辑: 据我了解,fromEvent(window, '...') 应该始终在区域内,因为 zone.js 会修补所有浏览器 EventTarget。

这也是在 Ionic + Cordova 应用程序上,但仅当构建在 Android 上时。我能看到差异的唯一原因可能是在 Webview 中它是 运行 但除此之外它只是基本的 RxJS 和 Angular

谢谢帕斯卡

看起来这是 Ionic + Cordova 应用程序和 Cordova 网络插件的超级特定问题 https://ionicframework.com/docs/native/network

这似乎干扰了 Android 平台。没有插件,错误不会发生,但在线和离线 window 事件也不会在 Android 上触发。所以我猜这与NgRx无关。