JavaScript删除导航器对象。

3
在JavaScript的window对象中,有一个navigator对象,它具有描述客户端浏览器的许多属性,其中之一是一个名为plugins的数组。我正在尝试通过在查看每个网页后注入JavaScript来禁用我的个人浏览器(Chrome)中的此功能。换句话说,我不希望我的插件被暴露给我访问的网站。
因此,我编写了以下内容,以便在Chrome上的每个HTTP(S)响应中包含:
(function(window) {
    delete window.navigator;
}(window));

但是导航器仍然存在,因为在控制台中进行测试时,我看到:enter image description here。然而,当我手动在控制台中输入delete navigator时,它可以工作!enter image description here那么为什么我的JavaScript代码无法移除导航器对象呢?这不是脚本是否正在执行的问题,我已经确认它正在执行,只是没有删除导航器对象。有任何想法吗?我也尝试将其设置为空对象,但没有卸载它...

1
你是从页面底部加载那个脚本吗? - Juan Bonnett
是的,我也尝试过使用setTimeout(),以防脚本冲突,但也没有任何改变。 - Zack
2个回答

1

目前在Chrome中,window.navigator及通过window.navigator公开的API似乎是只读的,简单地调用delete不会产生任何效果。

为了测试目的,我一直在使用Object.defineProperty来定义一个getter,返回null。当页面上的脚本或polyfill尝试测试特定的浏览器API是否存在时,这样做效果很好:

Object.defineProperty(window, 'navigator', {
          get() {
            return null;
          },
        });

0

尝试将window.navigator设置为另一个值。您可以将其设置为空数组或对象。

window.navigator = [];

或者

window.navigator = {};

无论如何,在重新定义之后,存储在导航器中的值都应该消失。

1
我已经尝试过了,我尝试设置所有的东西... window.navigator,window.navigator.plugins,设置为:{},[],new Object(),所有的东西... 重新赋值的问题在于没有内部setter方法,所以它不允许任何类型的navigator对象重新赋值,即使在控制台中,它也会立即恢复。 - Zack
在这种情况下,您删除window.navigator的机会非常渺茫。据我所见,在某些浏览器中重新定义它是可能的,但似乎您的浏览器不支持此功能。 - Nicholas F

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接