Уведомление не работает, когда открыты две вкладки одной страницы - PullRequest
0 голосов
/ 11 мая 2019

Я использую уведомление в своем веб-приложении MVC вместе с SignalR.Я вызываю клиентскую функцию на определенной странице с сервера.Проблема в том, что при одновременном открытии этой страницы на двух вкладках браузера не появляется никаких уведомлений.Я должен отметить, что он работает нормально, когда страница открыта только в одной вкладке.

Я заметил, что если я помещу предупреждение прямо перед строкой, где создается объект уведомления, обе вкладки получают уведомления, и этоэто то, что я ожидаю.Заранее спасибо.

$(function () {
    var notificationHub = $.connection.notificationHub;
    $.connection.hub.start();
    notificationHub.client.sendMessage = function (content) {
        setTimeout(notifyMe(content), 10);
    };
});

function notifyMe(message) {
    if (!("Notification" in window)) {
        alert("This browser does not support system notifications");
    }
    else if (Notification.permission === "granted") {
        var notification = new Notification(message);            
    }
    else if (Notification.permission !== 'denied') {
        Notification.requestPermission(function (permission) {
            // If the user accepts, let's create a notification
            if (permission === "granted") {
                var notification = new Notification(message);
            }
        });
    }
}

Обновление: Вот сценарий, в котором коду создания уведомления предшествует предупреждение, которое заставляет его работать должным образом:

    function notifyMe(message, system) {
        if (!("Notification" in window)) {
            alert("This browser does not support system notifications");
        }
        else if (Notification.permission === "granted") {
            alert('hit');
            var notification = new Notification(system, {
                body: message,
                tag: (Math.floor(Math.random() * 10)).toString(),
                icon: 'Content/Images/logo.png',
                dir: 'rtl',
                background: '#ff0000'
            });

        }
        else if (Notification.permission !== 'denied') {
            alert('hit');
            Notification.requestPermission(function (permission) {
                if (permission === "granted") {
                    var notification = new Notification(message)
                }
            });
        }
    }

$(function () {
    var notificationHub = $.connection.notificationHub;
    $.connection.hub.start();
    notificationHub.client.sendMessage = function (content, system) {
        setTimeout(notifyMe(content, system), 10);
    };
});

1 Ответ

0 голосов
/ 11 мая 2019

Проблема может быть в кодах инициализации вашего сигнализатора.Я предполагаю, что var notificationHub является объектом globla, и вы поместили эту лань на главную страницу.

Затем вам нужно проверить, является ли notificationHub нулевым, перед его инициализацией.Просто измените свой код следующим образом:

$(function () {
    if(notificationHub === undefined || notificationHub === null){
       var notificationHub = $.connection.notificationHub;
       $.connection.hub.start();
       notificationHub.client.sendMessage = function (content) {
           setTimeout(notifyMe(content), 10);
       };
    }
});

Обновление:

Поскольку вы подтвердили, что сигнализатор работает правильно (т.е. предупреждающее сообщение работает на обеих вкладках), тогдапопробуйте выполнить следующие действия для объекта Notification:

var notification = new Notification('Test', {
    body : message,
    tag : 'notify-tag-name', //Make this a random number
    icon : 'icon.png'
});

Обратите внимание, что если значение свойства tag одинаково на обеих вкладках браузера, уведомление будет отображаться только один раз, даже если многиевкладки браузера открыты.В этом случае вы можете указать случайное число в имени тега, чтобы убедиться, что они различаются на разных вкладках.

...