通过Web通知我的意思是
this(通知API的通知界面用于配置和向用户显示桌面通知).
我有Asp.Net MVC网络应用程序,我的页面中有一个按钮,它应该向客户发送通知.
我还使用signalr来推送消息和呼叫通知功能.
我的layout.cshtml看起来像这样:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>@ViewBag.Title - My ASP.NET Application</title>
</head>
<body>
<button id="btn" type="button">click</button>
@RenderBody()
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script src="~/Scripts/jquery.signalR-2.2.1.min.js"></script>
<script src="~/signalr/hubs"></script>
<script>
jQuery(function ($) {
var myHub = $.connection.chatHub;
myHub.client.addNewMessageToPage = function (title, message) {
var options = {
body: message,
tag: 'aaa'
}
// check permissions if already granted
if (Notification.permission === "granted") {
var notification = new Notification(title, options);
} else if (Notification.permission !== 'denied') {
// request permission
Notification.requestPermission(function (permission) {
// If the user accepts, let's create a notification
if (permission === "granted") {
var notification = new Notification(title, options);
}
});
}
console.log('the hub method called sucessfully');
}
$.connection.hub.logging = true;
$.connection.hub.start().done(function () {
$('#btn').on('click', function () {
myHub.server.send('foo', 'bar');
});
});
});
</script>
</body>
</html>
问题是,当我的应用程序的多个页面打开时,推送通知在Firefox中停止工作/显示. (当单个标签打开时,它可以工作).
这个bug只发生在firefox中,并且在chrome和IE中运行良好.
更新1:
我认为它不是信号器问题,因为调用了hub方法.
在所有选项卡上调用此行:
console.log(‘成功的中心方法’);
和信号器记录说:
SignalR: Invoking myhub.Send jquery.signalR-2.2.1.min.js
SignalR: Triggering client hub event 'addNewMessageToPage' on hub 'MyHub'. jquery.signalR-2.2.1.min.js
foo bar
SignalR: Invoked myhub.Send jquery.signalR-2.2.1.min.js
最佳答案 这是一个Firefox错误.
对我有用的方法是在不同的时间调用通知.这不是一个完整的解决方案,但运作良好.
var randomTime = Math.floor((Math.random() * 20) + 1) * 50;
setTimeout(function () {
newNotification = new Notification(Title, NotificationContent);
}, randomTime);