Firefox 从window.navigator中删除oscpu属性

Firefox 从window.navigator中删除oscpu属性,firefox,firefox-addon,firefox-addon-sdk,navigator,Firefox,Firefox Addon,Firefox Addon Sdk,Navigator,如果您使用的是FireFox,navigator有一个属性oscpu 通过在about:config中添加general.oscpu.override值,可以轻松更改该属性 但是,此选项仅在FireFox中存在,在任何其他浏览器中都不存在。这样就可以100%确定浏览器的类型 传统的方法无法消除它。无论发生什么情况(navigator中的oscpu)都将返回false 所有这些都不起作用: delete navigator.oscpu; 'oscpu' in navigator; // true

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

通过在
about:config
中添加
general.oscpu.override
值,可以轻松更改该属性

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

传统的方法无法消除它。无论发生什么情况(
navigator中的oscpu
)都将返回
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

有没有从navigator中删除此属性的方法?以及任何其他参数。我正在编写一个Firefox附加SDK扩展。

做你想做的事情会有潜在的副作用。知道你的目标是什么会有帮助的,以便确定一个好的方法来实现你的愿望

但是,对于您特别要求的内容,在当前范围内删除
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权限运行的代码的范围内)进行操作。

您的目标是什么?您正在尝试区分不同的浏览器吗?您是否正在尝试制作一个Firefox插件SDK插件,使Firefox在某些特定JavaScript代码中看起来像Google Chrome?一般来说,是JavaScript吗?区分浏览器有多种方法。
navigator.oscpu
的内容,甚至完整的
navigator
对象都不是唯一的内容。“您是否试图制作一个Firefox插件SDK插件,使Firefox看起来像Google Chrome”-是的。确切地在Сchrom上更改FireFox中的用户代理我们公开了此更改oscpu参数。你还需要考虑什么?