Service Worker 安装] 安装 Service Worker 失败 TypeError:无法为范围一信号注册 ServiceWorker?

mar*_*ony 5 javascript onesignal

在检查控制台后,我尝试使用简单的方法在网站上实现一个信号通知,它向我显示此错误。如何在我的网站中实现单一信号通知?

        <script src="https://cdn.onesignal.com/sdks/OneSignalSDK.js" async=""></script>
    <script>
      window.OneSignal = window.OneSignal || [];
      OneSignal.push(function() {
        OneSignal.init({
          appId: "c208302-0-284011-12E8D",
        });
      });
    </script>



ServiceWorkerManager.js:399 [Service Worker Installation] Installing service worker failed TypeError: Failed to register a ServiceWorker for scope ('https://www.simplenikah.pk/') with script ('https://www.simplenikah.pk/OneSignalSDKWorker.js?appId=c3aca046-2d30-4703-9454-c9f2666e3ac1'): A bad HTTP response code (404) was received when fetching the script.
(anonymous) @ ServiceWorkerManager.js:399
a @ tslib.es6.js:63
/OneSignalSDKWorker.js?appId=c3aca046-2d30-4703-9454-c9f2666e3ac1:1 Failed to load resource: the server responded with a status of 404 ()
OneSignalError.js:18 Uncaught (in promise) Pe: Registration of a Service Worker failed.
    at xe.<anonymous> (https://cdn.onesignal.com/sdks/OneSignalPageSDKES6.js?v=151105:1:144815)
    at Generator.next (<anonymous>)
    at r (https://cdn.onesignal.com/sdks/OneSignalPageSDKES6.js?v=151105:1:716)
Run Code Online (Sandbox Code Playgroud)

Dan*_*Con 2

可能出现的问题

这看起来是与setup相关的常见问题。

默认情况下, Service Worker文件应位于根目录中。

文件:

问题可能是输入错误,或者如果您使用 OneSignal Push 插件,Worpress 会将文件放入路径为 的文件夹中wp-content/plugins/onesignal-free-web-push-notifications/sdk_files/OneSignalSDKWorker.js如果您尝试通过添加自定义OneSignal对象初始化,这将引发错误。您在问题中添加的类似代码。

<script src="https://cdn.onesignal.com/sdks/OneSignalSDK.js" 
   async="">
</script>   
Run Code Online (Sandbox Code Playgroud)
<script>
    window.OneSignal = window.OneSignal || [];
    OneSignal.push(function() {
       OneSignal.init({
          appId: "YOUR_APP_ID",
       });
    });
</script>
Run Code Online (Sandbox Code Playgroud)

解决问题的选项

因此,要正确设置对象,缺少以下内容:工作人员的有效 范围路径。

例如

OneSignal.SERVICE_WORKER_PARAM = { scope: '/push/onesignal/' };
OneSignal.SERVICE_WORKER_PATH = 'push/onesignal/OneSignalSDKWorker.js'
Run Code Online (Sandbox Code Playgroud)

修复此问题或通过将工作文件移动到网站的根目录,或者如果这不是一个选项,则无论选择哪个位置,请在初始化配置中指定它。这样OneSignal就会在正确的位置寻找它。

一切加在一起将是这样的:

<script src="https://cdn.onesignal.com/sdks/OneSignalSDK.js" async="" ></script>
<script>
const OneSignal = window.OneSignal || [];
const initConfig = {
    appId: "YOUR_APP_ID"
};
OneSignal.push(function () {
    OneSignal.SERVICE_WORKER_PARAM = { scope: '/push/onesignal/' };
    OneSignal.SERVICE_WORKER_PATH = 'push/onesignal/OneSignalSDKWorker.js'
    OneSignal.init(initConfig);
});
</script>
Run Code Online (Sandbox Code Playgroud)

参考号 问题 403/404子目录中的 Service Worker 文件

WordPress - OneSignal 插件

如上所述,如果推送插件正在使用并处于活动状态,任何自定义设置都必须否定默认行为,或停用插件,或者还有一个选项可以关闭插件对象初始化,请参见下文。

插件设置页面 -> 高级设置 -> [ --[+]] 禁用 OneSignal 初始化

对于仍然有效的插件,这里是代码:

window.addEventListener('load', function() {
    window.OneSignal = window.OneSignal || [];
    window.OneSignal.push(function() {
       OneSignal.SERVICE_WORKER_PATH = "wp-content/plugins/onesignal-free-web-push-notifications/sdk_files/OneSignalSDKWorker.js";
      OneSignal.SERVICE_WORKER_PARAM = { scope: "/wp-content/plugins/onesignal-free-web-push-notifications/sdk_files/" };
      delete window._oneSignalInitOptions.path
      window.OneSignal.init(window._oneSignalInitOptions);
    });
  }); 
Run Code Online (Sandbox Code Playgroud)

重要部分:

  • 删除默认路径-delete window._oneSignalInitOptions.path
  • 在里面。在插件的仪表板 UI 中设置值 -window.OneSignal.init(window._oneSignalInitOptions);

参考号 WordPress 定制

展开配置

进一步扩展功能在配置中添加设置,例如

const initConfig = {
        appId: "YOUR_APP_ID",
        notifyButton: {
            enable: true
        },
        promptOptions: { 
            ...promtOptions
        }
}
Run Code Online (Sandbox Code Playgroud)

参考号 电子邮件 电话号码 网页提示