Nor*_*gul 3 push push-notification laravel onesignal vuejs2
我在我的 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>
Run Code Online (Sandbox Code Playgroud)
我也有自己的 service worker,所以我也遵循了这里的文档。
硬重置后发生的事情是安装了 Service Worker 并且一切正常,但是一旦我刷新页面,我就会得到:
OneSignalPageSDKES6.js?v=151102:1 Uncaught (in promise) InvalidStateError: 当前环境不支持此操作。在 Xe处的 Function.getServiceWorkerHref ( https://cdn.onesignal.com/sdks/OneSignalPageSDKES6.js?v=151102:1:41510 )。(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函数抛出的(定义在这里),错误信息是由枚举驱动的InvalidStateReason:
case InvalidStateReason.UnsupportedEnvironment:
super(`The current environment does not support this operation.`);
break;
Run Code Online (Sandbox Code Playgroud)
如果您查看第一个链接文件,您会看到getServiceWorkerHrefOneSignal 开发人员为那些敢于探索其源代码的人留下的注释:
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);
}
Run Code Online (Sandbox Code Playgroud)
如您所见,当 Service Worker 处于“Bypassed”状态时会引发错误。那是什么,你可能会问?让我们看看下面的ServiceWorkerActiveState枚举,在同一个文件中:
/**
* 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',
Run Code Online (Sandbox Code Playgroud)
看起来,当浏览器“硬刷新”页面时,它绕过了服务工作者,并且在发生这种情况时 OneSignal 无法正确初始化。硬刷新的发生有多种原因——以下是其中一些(据我所知):
no-cache标头硬重置后会发生什么
我不知道你所说的“硬重置”是什么意思,但这听起来像是会触发这个问题。我建议您关闭浏览器,然后在不使用“重置”功能的情况下访问您正在处理的页面——理论上,服务工作者应该用于缓存连续访问,这将确保 OneSignal 可以正常工作。
| 归档时间: |
|
| 查看次数: |
1254 次 |
| 最近记录: |