从window.navigator中删除oscpu属性

时间:2016-09-06 14:34:38

标签: firefox firefox-addon firefox-addon-sdk navigator

如果您使用的是FireFox,navigator有一个属性oscpu

可以通过在general.oscpu.override附加about:config值来轻松更改媒体资源。

但是,此选项仅存在于FireFox中,并且不存在于任何其他浏览器中。这样可以100%确定地确定浏览器的类型。

传统方法无法将其删除。无论发生什么(oscpu in navigator)都会返回false

这一切都不起作用:

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

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

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

有没有办法从导航器中删除此属性?实际上还有其他参数。我正在编写Firefox Add-on SDK扩展。

1 个答案:

答案 0 :(得分:1)

做你想要完成的事情有潜在的副作用。了解你的目标是有帮助的,以便确定一个完成你想要的好方法。

但是,对于您特别要求的内容,删除当前范围中的navigator.oscpu,以下内容有效:

//This specific code relies on navigator referring to the object which you want to
//  modify. In an Add-on SDK extension, if navigator is _actually_ the object you need
//  to modify to accomplish what you desire will depend on the scope you are in and
//  what object you have set the variable navigator to refer to.

delete navigator.__proto__.oscpu;
console.log(navigator.oscpu);      // undefined
'oscpu' in navigator               // false

请注意,您需要在希望其生效的每个上下文/范围内执行此操作。通常,这意味着您需要将内容脚本注入到您希望这样的每个页面和框架中。这也意味着你应该注意只在你想要欺骗的任何JavaScript(即在页面脚本的范围内,而不是在运行的代码范围内)看到它的上下文/范围中。享有Chrome权限。)。