google-chrome - Pushpad:订阅提示仅在用户第一次单击 chrome 上的启用按钮时出现
问题描述
你好,
我已经检查了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
});
}
});
感谢您帮助解决这个问题。
解决方案
- 确保将所有代码包装在 内
$(function () { ... }
,以便在页面完全加载时运行您的代码,否则您的点击处理程序可能无法正常工作。 - 可能关键在于,当您看到 Firefox 提示时,您单击“ Not now ”(而不是隐藏在 ▼ 菜单下的“ Never allow ”)。这就是为什么您可以多次看到提示的原因。在其他浏览器中,如 Chrome,默认选项是“阻止”(这是一个永久阻止,如“从不允许”)。
- 当用户阻止通知时,由于浏览器限制,您无法再次显示浏览器提示......但是有一些替代解决方案。例如,您可以根据需要多次显示自定义提示,然后仅当用户对您的自定义提示说“是”时才显示浏览器提示。请参阅此示例。否则,您只能向已阻止通知的用户显示提示,要求取消阻止通知。请参阅此示例。另一种选择是在页面中显示一个按钮,以允许用户在决定订阅通知时订阅通知。
推荐阅读
- python - Snakemake中输入函数的并行输出
- python - 在 RaspBerryPI 上的 virtualenv 中安装 Scipy 的问题
- wolfram-mathematica - 我可以为 wolfram 语言表达式获取 AST 吗?
- delphi - 在 Delphi CE 10.3 Rio 中安装 JEDI,安装程序中没有 CE 版本选项卡
- python - 在 Python 中的 for 循环中匹配字符串
- bloom-filter - 对复合对象使用布隆过滤器
- php - 在 Woocommerce 中创建订单时从动态创建的购物车中保存自定义购物车项目数据
- sql-server - 创建数据透视表后汇总 SQL Server 中的列
- java - 检查路线是否自相交
- android - Google Play 控制台 - 崩溃报告:java.lang.RuntimeException