firefox - 从 window.navigator 中删除 oscpu 属性

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

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

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

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

常规手段无法去除。无论发生什么(导航器中的 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

有没有办法从导航器中删除这个属性?实际上还有任何其他参数。我正在编写一个 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

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

关于firefox - 从 window.navigator 中删除 oscpu 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39351663/

相关文章:

html - 为什么 2px 边框在 Firefox 和 Chrome 中渲染得比 2px 高度高?

javascript - 使用 PKCS #7(不透明)为网络签名数据

javascript - 如何设置事件监听器以使用 JavaScript 监听 HTML 源代码中的文本框?

firefox-addon - 尝试从 Firefox 插件 (SDK) 中的资源加载内容时出现安全错误

javascript - 在 Firefox 非覆盖扩展中,如何向浏览器工具栏图标添加文本?

javascript - 在通知中显示图标 Firefox OS

html - 更改父元素的定位会阻止 Firefox 中的子元素 CSS3 转换

javascript - 如何从 Firefox 扩展/插件向任何页面动态添加 div 元素

javascript - 打开带有本地 URL 的选项卡时加载 CSS 文件

html - 如何向 Firefox 工具栏添加一个看起来合适的文本输入字段?