从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扩展。
答
做你想做的事情有潜在的副作用。知道你的目标是什么以帮助你确定一个完成你的愿望的好方法。
但是,你有什么特别要求,在目前的范围,以下作品移除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看起来像Google Chrome一些特定的JavaScript代码?一般来说JavaScript?有多种方法可以区分浏览器。 'navigator.oscpu'的内容,甚至是完整的'navigator'对象都不是唯一的。 – Makyen
“你是否试图制作一个Firefox附加组件,使Firefox看起来像Google Chrome” - 是的。究竟。 更改FireFox中的用户代理,我们会透露此更改oscpu参数。 你还需要考虑什么? –