【问题标题】:How to override navigator.plugins in javascript?如何在 javascript 中覆盖 navigator.plugins?
【发布时间】:2015-08-11 16:39:17
【问题描述】:

如何在 javascript 中覆盖 navigator.plugins?
有一个网站使用 navigator.plugins 读取我的插件列表,我不想让他们阅读我的插件,我想向他们展示假插件列表。
我怎样才能做到这一点?

我知道这是重复的,但我对这个不满意:
How to override navigator.plugins in javascript or how to set it null?

为了覆盖 javascript 中的函数,我们可以这样操作:

<script type="text/javascript">
    window.DoStuff = function () {
        alert("bar");   //this is the override
    };

    function DoStuff() {
        alert("foo");   //this is the original, occuring later in the page
    };
</script>

但是 navigator.plugins 呢?
这是我们阅读这些插件列表的方式:

if (navigator.plugins && navigator.plugins.length) {
    for (var v = "", w = 0; w < navigator.plugins.length; w++) {
        var x = navigator.plugins[w].name; -1 != x.indexOf("Java") && (t = !0);
        v += x + "\r\n"
    }
 alert(v);
}

如您所见,该网站是一个恶意网站,出于某些原因想了解已安装的插件。
我怎样才能绕过它们?


根据第一个答案进行编辑:
那么我们如何用 js 函数改变他们的代码,并用主列表替换新的插件列表呢?
这样就不用改只读的window.navigator.plugins了!

【问题讨论】:

  • Window.navigator 属性是只读的,所以您会认为Window.navigator.plugins 也是如此,这可能意味着您无法更改它。
  • 如何覆盖他们的 js 代码?意思是运行一个js函数来替换主插件列表?

标签: javascript plugins overriding


【解决方案1】:

根据MDNWindow.navigator.plugins 属性是只读的,这可能意味着您无法更改它。

https://developer.mozilla.org/es/docs/Web/API/Navigator

【讨论】:

  • 这实际上不是真的,您可以更改/覆盖每个只读值,只要它可以通过 Object.defineProperty() 函数进行配置。
  • @Robbendebiene - 像plugins 这样的原生对象,它返回一个pluginsArray 类型的对象,它甚至不返回PropertyDescriptor,并且是只读的,并且不能更改,甚至不能defineProperty,仅适用于非本地对象。
  • jsfiddle.net/wtdvfy3n/1 我还可以使用相同的方法将属性添加到 navigator.plugins 对象
  • @Robbendebiene - 当然,如果你只是公然用另一个对象覆盖整个对象,那么它是否是只读的也没关系,因为你刚刚替换了它。
  • 这就是我所说的覆盖或更改属性,这是提问者提出的并被您宣布为不可能的,但也许我误解了这个问题。
猜你喜欢
  • 2012-04-22
  • 2016-11-08
  • 2016-06-03
  • 2013-08-25
  • 2011-07-21
  • 1970-01-01
  • 1970-01-01
  • 2012-12-17
相关资源
最近更新 更多