如何在javascript中覆盖navigator.plugins或如何将其设置为空

How to override navigator.plugins in javascript or how to set it null?

本文关键字:设置 navigator javascript 覆盖 plugins      更新时间:2023-09-26

JavaScript 中的navigator.plugins为浏览器提供了插件数组。是否可以将此数组设置为 null?我试过了(navigator.plugins = null;),但它没有设置为空。另外,我尝试将其设置为空数组(navigator.plugins = new Array();

另外,如果这是可能的,这是一个好的做法吗?

在Chrome中,可以通过将window.navigator设置为null来执行此操作。但是,我不确定你为什么要这样做。由于您正在处理 JavaScript,因此有人可能会使用调试器来阻止您的代码运行并在您将其设置为 null 之前截获此代码。

此外,navigator 对象通常包含有关客户端计算机的信息,如果我是用户,我很可能比您的服务器更了解我的计算机,因此禁用此功能实际上没有任何可衡量的优势我可以看到。

此外,这必须在每个页面加载时发生。

最后,我不知道其他浏览器会如何处理这个问题,但是您很可能会在其他浏览器中尝试执行此操作时遇到麻烦。

简而言之,我认为这不是一个好的做法;但是,你没有提供你为什么要这样做的细节。没有这些信息,我不能给你一个公平的答案,除非这不是一个好主意。因此,您当然需要检查为什么要这样做,并确定是否真的值得麻烦。

有一些 Web 应用程序首先检索浏览器名称。UIWebView 的导航器对象不返回足够的信息。例如 navigator.userAgent 返回

Mozilla/5.0 (iPad;CPU OS 9_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML,像壁虎)手机/13C75

这些 Web 应用程序无法从上述信息中检测浏览器名称,并引发不支持的浏览器异常。

为了处理这种情况,我覆盖了下面给出的导航器对象,是的,Web 应用程序能够完美运行。这在火狐中失败了,但我的要求是仅支持 UIWebView

var __originalNavigator = navigator;
navigator = new Object();
navigator.__proto__ = __originalNavigator;
navigator.__defineGetter__('userAgent', function () { return "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.103 Safari/537.36"; });
navigator.__defineGetter__('plugins', function () { return []; });

我从未听说过有人想要将插件数组设置为 null,坦率地说,我不明白如果您这样做会产生什么好处。就像jmort253所说的那样,可以在chrome中将其设置为null,但在其他浏览器中您可能无法做到。请记住,导航器.plugin不是JavaScript数组,而是pluginArray