如何覆盖JavaScript Web API通知对象

时间:2018-11-20 09:43:55

标签: javascript electron

我有一种情况,我需要打开和关闭在电子窗口内的Web视图中加载的网页的通知。为此,我在Web视图中注入了一个预加载文件,该文件将覆盖这样的Notification对象。

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

我通过更改本地存储变量来启用和禁用通知。

问题是我要控制的网页正在使用Notification.permission方法(refer this)。现在,我的新Notification对象没有权限属性。我无法以可以更新其构造函数的方式覆盖Notification对象,以便可以禁用该通知并具有原始Notification对象的其他属性。

有没有办法做到这一点,或者根本不可能吗?任何帮助或建议都是绝对欢迎的。

1 个答案:

答案 0 :(得分:2)

您可以轻松模拟Notification 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);
};