Notification.requestPermission() 在 Mozilla 上抛出错误
Notification.requestPermission() throwing error on Mozilla
我正在尝试获取 Mozilla 的通知。但是它不断抛出这个错误。
The Notification permission may only be requested from inside a short
running user-generated event handler.
这是我的代码。相同的代码在 Chrome、EDGE 和 Opera 上运行良好。
Notification.requestPermission().then(function (status) {
if (status === 'denied') {
//
} else if (status === 'granted') {
//
}
});
我发现了一些与此相关的问题,但其中 none 对我有帮助。
该消息表示您的订阅代码必须在用户生成的事件(如点击)中调用。
可能您正在尝试在页面加载时订阅用户,但这在某些浏览器(如 Firefox 和 Safari)上是不可能的,因为这被认为是用户的烦恼。
这就是为什么许多推送服务(如 OneSignal、Pushpad 等)建议使用双重选择加入的原因之一:首先显示一个订阅提示或按钮,设计为 HTML / CSS 然后,在单击按钮后,您实际请求权限(上面的代码)。
这也发生在我身上。
如果您不想使用按钮或其他元素事件,您可以使用更高级别的文档单击事件并从那里请求权限。
document.addEventListener('click', () => {
Notification.requestPermission().then(function (status) {
if (status === 'denied') {
//
} else if (status === 'granted') {
//
}
});
})
这段代码对我有用:
JS
if (Notification.permission === 'granted') {
//do something
}
else if (Notification.permission === 'default') {
$('#allow-push-notification-bar').show();
}
$('#allow-push-notification').click(function () {
$('#allow-push-notification-bar').hide();
Notification.requestPermission().then(function (status) {
if (status === 'denied') {
//do something
} else if (status === 'granted') {
//do something
}
});
});
HTML
<div id="allow-push-notification-bar" class="allow-push-notification-bar">
<div class="content">
<div class="text">
Want to get notification from us?
</div>
<div class="buttons-more">
<button type="button" class="ok-button button-1" id="allow-push-notification">
Yes
</button>
<button type="button" class="ok-button button-1" id="close-push-notification">
No
</button>
</div>
</div>
</div>
这将在加载带有 2 个按钮的网页后打开一个弹出窗口(是/否)。单击是,浏览器将要求允许通知。
我正在尝试获取 Mozilla 的通知。但是它不断抛出这个错误。
The Notification permission may only be requested from inside a short running user-generated event handler.
这是我的代码。相同的代码在 Chrome、EDGE 和 Opera 上运行良好。
Notification.requestPermission().then(function (status) {
if (status === 'denied') {
//
} else if (status === 'granted') {
//
}
});
我发现了一些与此相关的问题,但其中 none 对我有帮助。
该消息表示您的订阅代码必须在用户生成的事件(如点击)中调用。
可能您正在尝试在页面加载时订阅用户,但这在某些浏览器(如 Firefox 和 Safari)上是不可能的,因为这被认为是用户的烦恼。
这就是为什么许多推送服务(如 OneSignal、Pushpad 等)建议使用双重选择加入的原因之一:首先显示一个订阅提示或按钮,设计为 HTML / CSS 然后,在单击按钮后,您实际请求权限(上面的代码)。
这也发生在我身上。 如果您不想使用按钮或其他元素事件,您可以使用更高级别的文档单击事件并从那里请求权限。
document.addEventListener('click', () => {
Notification.requestPermission().then(function (status) {
if (status === 'denied') {
//
} else if (status === 'granted') {
//
}
});
})
这段代码对我有用:
JS
if (Notification.permission === 'granted') {
//do something
}
else if (Notification.permission === 'default') {
$('#allow-push-notification-bar').show();
}
$('#allow-push-notification').click(function () {
$('#allow-push-notification-bar').hide();
Notification.requestPermission().then(function (status) {
if (status === 'denied') {
//do something
} else if (status === 'granted') {
//do something
}
});
});
HTML
<div id="allow-push-notification-bar" class="allow-push-notification-bar">
<div class="content">
<div class="text">
Want to get notification from us?
</div>
<div class="buttons-more">
<button type="button" class="ok-button button-1" id="allow-push-notification">
Yes
</button>
<button type="button" class="ok-button button-1" id="close-push-notification">
No
</button>
</div>
</div>
</div>
这将在加载带有 2 个按钮的网页后打开一个弹出窗口(是/否)。单击是,浏览器将要求允许通知。