0

你好

我已经检查了PushPad: Subscribe is removed after site refresh问题的答案,但这对我没有帮助。

我按照文档创建了一个订阅/取消订阅按钮,每次单击订阅按钮时都会在 Firefox 上显示提示,所以我想我的流程是正确的,但我不明白为什么它在 Chrome 上不起作用 =>提示仅在我第一次启动 Chrome 时显示。

这就是我所做的

pushpad('init', #projectID);
var pushId = $("#main").data("pushid");
var pushSig = $("#main").data("pushsig");

var updateButton = function (isSubscribed) {
    var btn = $('#activate-push-notif');
    if (isSubscribed) {
        btn.html('Unsubscribe');
        btn.addClass('subscribed');
    } else {
        btn.html('Subscribe');
        btn.removeClass('subscribed');
    }
};
// check whether the user is subscribed to the push notifications and
// initialize the button status (e.g. display Subscribe or Unsubscribe)
pushpad('status', updateButton);

// when the user clicks the button...
$('#activate-push-notif').on('click', function (e) {
    e.preventDefault();

    // if he wants to unsubscribe
    if ($(this).hasClass('subscribed')) {
        pushpad('unsubscribe', function () {
            updateButton(false);
        }, {
            uid: pushId,
        });

        // if he wants to subscribe
    } else {
        // try to subscribe the user to push notifications
        pushpad('subscribe', function (isSubscribed) {
            if (isSubscribed) {
                updateButton(true);
            } else {
                updateButton(false);
                alert('You have blocked notifications from your browser preferences.');
            }
        }, {
            uid: pushId,
            uidSignature: pushSig
        });
    }
});

感谢您帮助解决这个问题。

4

1 回答 1

0
  1. 确保将所有代码包装在 内$(function () { ... },以便在页面完全加载时运行您的代码,否则您的点击处理程序可能无法正常工作。
  2. 可能关键在于,当您看到 Firefox 提示时,您单击“ Not now ”(而不是隐藏在 ▼ 菜单下的“ Never allow ”)。这就是为什么您可以多次看到提示的原因。在其他浏览器中,如 Chrome,默认选项是“阻止”(这是一个永久阻止,如“从不允许”)。
  3. 当用户阻止通知时,由于浏览器限制,您无法再次显示浏览器提示......但是有一些替代解决方案。例如,您可以根据需要多次显示自定义提示,然后仅当用户对您的自定义提示说“是”时才显示浏览器提示。请参阅此示例。否则,您只能向已阻止通知的用户显示提示,要求取消阻止通知。请参阅此示例。另一种选择是在页面中显示一个按钮,以允许用户在决定订阅通知时订阅通知。
于 2018-11-07T13:35:40.490 回答