gpt4 book ai didi

laravel - 刷新后 OneSignal 注册失败

转载 作者:行者123 更新时间:2023-12-04 02:32:08 31 4
gpt4 key购买 nike

我在我的 Laravel/Vue 应用程序中使用 OneSignal。我已将其包含在 <head> 中如文档中所述:

<script src="https://cdn.onesignal.com/sdks/OneSignalSDK.js" async=""></script>
<script>
var OneSignal = window.OneSignal || [];
OneSignal.push(function() {
OneSignal.init({
appId: "{{ env('ONESIGNAL_APP_ID') }}"
});
OneSignal.showNativePrompt();
});
</script>

<script>

if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/OneSignalSDKWorker.js')
.then(function () {
console.log('Service worker registered');
})
.catch(function (error) {
console.log('Service worker registration failed:', error);
});
} else {
console.log('Service workers are not supported.');
}

</script>

我也有自己的 Service Worker,所以我也遵循了此处的文档。

硬重置后发生的事情是安装了 service worker 并且一切正常,但是一旦我刷新页面我得到:

OneSignalPageSDKES6.js?v=151102:1 Uncaught (in promise) InvalidStateError: The current environment does not support this operation.at Function.getServiceWorkerHref (https://cdn.onesignal.com/sdks/OneSignalPageSDKES6.js?v=151102:1:41510)at xe. (https://cdn.onesignal.com/sdks/OneSignalPageSDKES6.js?v=151102:1:144028)at Generator.next ()at r (https://cdn.onesignal.com/sdks/OneSignalPageSDKES6.js?v=151102:1:716)

我不知道那是什么意思?什么是“当前环境”?从哪里开始调试?我试过在它周围放置控制台日志,但它让我无处可去......

最佳答案

您可以通过查看库的源代码来开始调试。

在您的情况下,您的库是用于浏览器的 OneSignal SDK。

让我们开始吧!!!

我们可以看到这个错误是由 getServiceWorkerHref 函数(定义为 here )抛出的,错误信息是 driven通过 InvalidStateReason 枚举:

      case InvalidStateReason.UnsupportedEnvironment:
super(`The current environment does not support this operation.`);
break;

如果您查看第一个链接文件,您会看到关于 getServiceWorkerHref OneSignal 开发人员留给那些敢于冒险进入其源代码的人的注释:

    else if (workerState === ServiceWorkerActiveState.Bypassed) {
/*
if the page is hard refreshed bypassing the cache, no service worker
will control the page.
It doesn't matter if we try to reinstall an existing worker; still no
service worker will control the page after installation.
*/
throw new InvalidStateError(InvalidStateReason.UnsupportedEnvironment);
}

如您所见,当 service worker 处于“已绕过”状态时会引发错误。那是什么,你可能会问?我们看ServiceWorkerActiveState枚举below, in the same file :

  /**
* A service worker is active but not controlling the page. This can occur if
* the page is hard-refreshed bypassing the cache, which also bypasses service
* workers.
*/
Bypassed = 'Bypassed',

看起来,当浏览器“硬刷新”页面时,它会绕过 service worker,并且 OneSignal 在这种情况下无法正确初始化。发生硬刷新的原因有很多——以下是其中的一些(据我所知):

  • 如果您多次点击刷新按钮(通常在短时间内连续刷新几秒钟可能会触发此问题)
  • 如果您在 DevTools 中禁用了缓存
  • 如果服务器设置了一个no-cache header

What is happening after a hard reset

我不太清楚您所说的“硬重置”是什么意思,但这听起来像是会触发此问题。我建议您关闭浏览器,然后在不使用“重置”功能的情况下访问您正在处理的页面——理论上,service worker 应该用于在连续访问时进行缓存,这将确保 OneSignal 可以正常运行。

关于laravel - 刷新后 OneSignal 注册失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63659435/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com