2

有没有办法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

(这样做的原因是为了让较新的浏览器在测试等方面表现得更像旧浏览器。)

4

2 回答 2

3

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

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

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

于 2016-03-09T12:37:47.710 回答
0

navigator.serviceWorker是只读属性,因此不可更改检查此链接

于 2016-03-09T12:25:07.653 回答