@BuTOC_90

Как открыть новую вкладку браузера через клик по push-уведомлению, если сайт уже открыт?

всем привет

подскажите, пожалуйста, как открыть новую вкладку браузера через клик по push-уведомлению, если сайт уже открыт в браузере? Сейчас поведение такое, что браузер просто делает уже открытую вкладку активной

например, в пуш ссылка стоит site.com/home, а в браузере уже открыта вкладка с ссылкой site.com/about. в таком случае, браузер просто перекидывает на вкладку site.com/about при клике на пуш

как добиться такого поведения, чтобы даже если уже открыта в браузере вкладка с доменом, который указан в ссылке пуш, всё равно открылась новая вкладка при клике на пуш?

в обработчике firebase-messaging-sw.js код такой:

importScripts('https://www.gstatic.com/firebasejs/9.6.0/firebase-app-compat.js');
importScripts('https://www.gstatic.com/firebasejs/9.6.0/firebase-messaging-compat.js');

const firebaseConfig = {
    ... прописан конфиг ...
};

firebase.initializeApp(firebaseConfig);
const messaging = firebase.messaging();

messaging.onMessage(function(payload) {
    const notificationTitle = payload.notification.title;
    const notificationOptions = {
        body: payload.notification.body,
        icon: payload.notification.icon,
        data: { url: payload.notification.click_action } // добавляем ссылку в data
    };

    self.registration.showNotification(notificationTitle, notificationOptions);
});

self.addEventListener('notificationclick', function(event) {
    event.notification.close(); // закрываем уведомление
    const url = event.notification.data.url; // получаем ссылку из data

    // Переход по ссылке
    if (url) {
        clients.openWindow(url);
    }
}, false);


спасибо заранее
  • Вопрос задан
  • 49 просмотров
Пригласить эксперта
Ответы на вопрос 1
@romant094
Frontend-developer
Проблема заключается в том, что clients.openWindow(url); не открывает новую вкладку, если вкладка с таким URL уже открыта. Вместо этого он просто переходит на существующую вкладку с этим URL.

Для открытия новой вкладки даже в случае, если сайт уже открыт в браузере, вам нужно использовать window.open(url, '_blank');. Вот как это можно сделать в вашем коде:
self.addEventListener('notificationclick', function(event) {
    event.notification.close()
    const url = event.notification.data.url
    if (url) {
        window.open(url, '_blank');
    }
}, false);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы