Как переопределить JavaScript веб-API-объект уведомления

У меня есть сценарий, где мне нужно включать и выключать уведомления для веб-страницы, которая загружается в веб-просмотр внутри электронного окна. Чтобы сделать это, я вставил файл предварительной загрузки в веб-представление, которое переопределяет объект уведомления следующим образом.

window.oldNotification = window.Notification;
window.Notification = function() {
    let notificationEnabled = localStorage.getItem('notification-permissions') === 'true';
    if (notificationEnabled) {
        new window.oldNotification(...arguments);
    }
};

Я включаю и отключаю уведомления путем изменения локальной переменной хранения.

Проблема в том, что веб-страница, которой я хочу управлять, использует Notification.permission метод (см. это). Теперь у моего нового объекта Уведомления нет свойства разрешения. Я не могу переопределить объект Notification таким образом, чтобы я мог обновить его конструктор, чтобы я мог отключить уведомление, а также иметь другие свойства исходного объекта Notification.

Есть ли способ достичь этого или это вообще невозможно? Любая помощь или предложение абсолютно приветствуются.

0 ответов

Вы можете легко эмулировать API уведомлений

window.Notification = function() {
  const notificationEnabled = Notification.permission === 'granted';
  return notificationEnabled ? new window.oldNotification(...arguments) : {};
};

Object.defineProperty(Notification, 'permission', {
  get() {
    return localStorage.getItem('notification-permissions') === 'true' ? 'granted' : 'denied';
  }
});

Notification.requestPermission = (callback) => {
  if (typeof callback === 'function') {
    callback(Notification.permission);
  }

  return Promise.resolve(Notification.permission);
};
Другие вопросы по тегам