嗨,我想向浏览器发送推送通知。所以我使用了onesignal。

var OneSignal = OneSignal || [];
OneSignal.push(["init", {
    appId           :   "xxxxxxx",
    autoRegister    :   false, /* Set to true to automatically prompt visitors */
    subdomainName   :   "https://foxtaxi.onesignal.com",
    notifyButton    :   {
        enable: true /* Set to false to hide */
    }
}]);

OneSignal.push(function() {
    OneSignal.once("init", function(event) {
        alert("hhh");
    });
 });

但我收到 Uncaught TypeError: OneSignal.once is not a function 。如果有人知道,请帮助我。

最佳答案

解决方案

您需要使用 OneSignal.push(function() { ... }) 结束您的通话:

OneSignal.push(function() {
  /* ... */
});

此外,OneSignal.once('init') 不是有效事件。 supported events are described here

解释

OneSignal SDK 在您的页面上异步加载,例如:
<script src="https://cdn.onesignal.com/sdks/OneSignalSDK.js" async"></script>

您可以阅读有关异步属性 herehere 的更多信息。

基本上,没有 async 属性的脚本在获取和执行页面时停止加载页面的其余部分,但 async 脚本允许页面的其余部分加载,而它最终会被获取和执行。这给依赖于现有 OneSignal 的页面脚本带来了问题。如果 OneSignal 变量还不存在,如何使用 OneSignal

大多数 OneSignal 代码示例以:
var OneSignal = window.OneSignal || [];

这表示:创建一个 OneSignal 变量,如果 OneSignal 已加载,则已将其分配给加载的实例,否则让 OneSignal 等于空数组 []

所有的数组都有一个 .push() function ,所以在这一点上, OneSignal 变量只是一个我们正在插入它的函数数组。

当 SDK 最终加载时,SDK processes all the functions pushed so far and redefines .push()

关于javascript - 未捕获的 TypeError : OneSignal. 曾经不是函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38451760/

10-10 23:31