如果您使用的是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附加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 - 从window.navigator中删除oscpu属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39351663/

10-12 07:07