如何从导航器对象中删除 serviceWorker 属性

How to remove the serviceWorker property from the navigator object?

本文关键字:删除 serviceWorker 属性 对象 导航      更新时间:2023-09-26

有没有办法从导航器对象中完全删除serviceWorker属性?(因此表达式('serviceWorker' in navigator)为假。

delete不起作用:

delete navigator.serviceWorker;
'serviceWorker' in navigator; // true

分配给undefined不会执行任何操作(即使它足够):

navigator.serviceWorker = null;
'serviceWorker' in navigator; // true
navigator.serviceWorker === null; // false

Object.defineProperty也不起作用:

Object.defineProperty(navigator, "serviceWorker", { 
  configurable: true,
  value: undefined
});
'serviceWorker' in navigator; // true
navigator.serviceWorker === undefined; // true

(这样做的原因是为了使较新的浏览器的行为更像较旧的浏览器进行测试等。

如果你想让新浏览器的行为像旧浏览器一样进行测试,你可以定义和使用一个新函数:

function areServiceWorkersSupported() {
  return 'serviceWorker' in navigator;
}

然后,在测试期间,您可以覆盖该函数。

navigator.serviceWorker

只读属性,因此不可更改检查此链接