Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将浏览器中的导航器更改为假装已安装插件(使用javascript)_Javascript_Google Chrome Extension_Navigator - Fatal编程技术网

将浏览器中的导航器更改为假装已安装插件(使用javascript)

将浏览器中的导航器更改为假装已安装插件(使用javascript),javascript,google-chrome-extension,navigator,Javascript,Google Chrome Extension,Navigator,我正在尝试做Chrome扩展,假装安装了一些插件。我试图编辑navigator.plugins,但这些属性是只读的。我可以添加新的条目navigator.plugins[x],但我不知道如何在navigator.plugins中创建新的(Plugin、PluginArray或MimeType)对象 甚至可能吗?尝试破解它,但失败了。显然,插件类型不能手动实例化。根据规范,它是只读的,Chrome也相应地实现了它()。正如您所看到的,构造函数没有向DOM公开,因此我们不能使用newplugin或其

我正在尝试做Chrome扩展,假装安装了一些插件。我试图编辑navigator.plugins,但这些属性是只读的。我可以添加新的条目navigator.plugins[x],但我不知道如何在navigator.plugins中创建新的(Plugin、PluginArray或MimeType)对象


甚至可能吗?

尝试破解它,但失败了。显然,
插件
类型不能手动实例化。根据规范,它是只读的,Chrome也相应地实现了它()。正如您所看到的,构造函数没有向DOM公开,因此我们不能使用
newplugin
或其他方法来实例化它


另一方面,您可以尝试通过
元素,例如,它将用您自己的实现替换整个内置的
Plugin
类,并使用该伪类填充
navigator.plugins
。对于
PluginArray

这里有一种方法可以很好地欺骗PluginArray(注意
对象.setPrototypeOf
):

控制台输出:

我还没有添加MimeType属性,但是应该可以用类似的方式实现

请随意提交一份PR,以备不时之需(我为木偶演员开发了一个插件,它实现了各种检测规避技术):


编辑:我有一些空闲时间并添加了代码来完全模拟
navigator.plugins
navigator.mimeTypes
。它甚至会模仿函数方法、实例类型和.toString属性,使它们看起来像是本地的,类似于普通的Google Chrome。

以类似的方式进行操作怎么样?我对更改useragent没有问题,因为这是一个简单的值,但我不确定如何创建像-Plugin,PluginArray或MimeType-in-navigator.pluginsAh,只需重用现有对象的原型,如
var-plugin=object.create(object.getPrototypeOf(navigator.plugins[0]))
@wOxxOm如果我将其写入控制台,它将创建类型对象,这对我没有帮助,因为我需要类型插件检测无头模式非常简单。假导航器对象是无用的。
(function generatePluginArray() {
  const pluginData = [
    { name: "Chrome PDF Plugin", filename: "internal-pdf-viewer", description: "Portable Document Format" },
    { name: "Chrome PDF Viewer", filename: "mhjfbmdgcfjbbpaeojofohoefgiehjai", description: "" },
    { name: "Native Client", filename: "internal-nacl-plugin", description: "" },
  ]
  const pluginArray = []
  pluginData.forEach(p => {
    function FakePlugin () { return p }
    const plugin = new FakePlugin()
    Object.setPrototypeOf(plugin, Plugin.prototype);
    pluginArray.push(plugin)
  })
  Object.setPrototypeOf(pluginArray, PluginArray.prototype);
  return pluginArray
})()