从window.navigator中删除oscpu属性

问题描述:

如果您使用的是FireFox,则navigator有一个属性oscpu从window.navigator中删除oscpu属性

该属性可以很容易地通过about:config附加general.oscpu.override值进行更改。

但是,此选项仅存在于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附加SDK扩展。

+0

你的目标是?你试图区分浏览器吗?您是否试图制作一个Firefox附加组件SDK,使Firefox看起来像Google Chrome一些特定的JavaScript代码?一般来说JavaScript?有多种方法可以区分浏览器。 'navigator.oscpu'的内容,甚至是完整的'navigator'对象都不是唯一的。 – Makyen

+0

“你是否试图制作一个Firefox附加组件,使Firefox看起来像Google Chrome” - 是的。究竟。 更改FireFox中的用户代理,我们会透露此更改oscpu参数。 你还需要考虑什么? –

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

但是,你有什么特别要求,在目前的范围,以下作品移除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权限)。