未捕获的TypeError:OneSignal.once不是函数

时间:2016-07-19 07:12:28

标签: javascript push-notification onesignal

Hai我想将推送通知发送到浏览器。所以我使用了信号。

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");
    });
 });

但我得到未捕获的TypeError:OneSignal.once不是函数。如果有人知道,请帮助我。

2 个答案:

答案 0 :(得分:6)

解决方案

您需要使用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()

答案 1 :(得分:0)

OneSignal.push(function() {
    OneSignal.once("init", function(event) {
        // This callback fires only once when the event occurs, and does not refire
    });
});