检测从网站安装的软件

时间:2018-04-10 14:38:53

标签: javascript jquery html windows google-chrome

我正在用HTML创建一个网站。无论如何都要检测安装在访问网站的PC上的软件。我确信它是由JavaScript完成的,但我找不到任何指南。我也玩了一些jquery,它没有用。谢谢

3 个答案:

答案 0 :(得分:2)

没有

出于安全考虑,浏览器中的JavaScript非常sand-boxed。除了浏览器提供的非常有限的信息子集之外,没有办法找到网站运行的计算机的任何信息。

安装的软件不包含在该信息中,也不是计算机上的文件。

答案 1 :(得分:1)

您可以使用Electron,这样您就可以通过JavaScript(使用Node JS)与用户进行交互。

但是,它要求用户将代码安装为应用程序。所以它不再是一个"网站"。

答案 2 :(得分:1)

简短的回答是:。但是,我想仔细而具体地回答这个问题,因为我认为您可能误解了浏览器的目标和功能。您的计算机的某些方面是由您的浏览器公开的。但是,有些事情是故意混淆的,以保护最终用户。

当您制作Web应用程序时,您不应该考虑“我可以利用的用户安装了什么”。您应该尝试提供一个功能集,然后根据用户可以使用的内容progressively enhance提供用户体验。

您评论了Flash如何检测游戏手柄,

  

我记得很久以前我曾经玩过在线Flash游戏   用于检测我的虚拟控制器软件的地方。它完成了   通过Flash或JavaScript?

JavaScript实际上也可以使用Gamepad API执行此操作。有关示例,请参阅Using the Gamepad API

需要注意的是,浏览器是此信息的守门员,它试图尽可能地限制(或应该)暴露的内容。例如,浏览器可以背叛信息的另一种方式是通过user agent字符串,该字符串随浏览器发出的每个请求一起发送。它可以识别您正在使用的浏览器以及您正在使用的操作系统。当然它也可以省略,或平躺。

可以背叛的另一件事是屏幕分辨率。我想说,用户通常以最大分辨率运行浏览器,您可以收集用户监视器的尺寸。

您还可以获取有关用户是否拥有带MediaDevices.getUserMedia()的麦克风或相机的信息。

您甚至可以尝试弄清楚用户的GPU对WebGL上下文的能力以及询问调试参数:

function printContextInfo(gl) {
  console.groupCollapsed("WebGL Information");
  console.groupCollapsed("Version Information");
  console.log(`Version: ${gl.getParameter(gl.VERSION)}`);
  console.log(`Shading Language Version: ${gl.getParameter(gl.SHADING_LANGUAGE_VERSION)}`);
  console.log(`Renderer: ${gl.getParameter(gl.RENDERER)}`);
  console.groupEnd();
  console.groupCollapsed("Parameter Limits");
  console.log(`Max Texture Size: ${gl.getParameter(gl.MAX_TEXTURE_SIZE)}`);
  console.log(`Max Viewport Dims: ${gl.getParameter(gl.MAX_VIEWPORT_DIMS)}`);
  console.log(`Max Vertex Attribs: ${gl.getParameter(gl.MAX_VERTEX_ATTRIBS)}`);
  console.log(`Max Vertex Uniform Vectors: ${gl.getParameter(gl.MAX_VERTEX_UNIFORM_VECTORS)}`);
  console.log(`Max Varying Vectors: ${gl.getParameter(gl.MAX_VARYING_VECTORS)}`);
  console.log(`Max Combined Texture Image Units: ${gl.getParameter(gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS)}`);
  console.log(`Max Vertex Texture Image Units: ${gl.getParameter(gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS)}`);
  console.log(`Max Texture Image Units: ${gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS)}`);
  console.log(`Max Fragment Uniform Vetors: ${gl.getParameter(gl.MAX_FRAGMENT_UNIFORM_VECTORS)}`);
  console.groupEnd();
  console.groupCollapsed("Supported Extensions");
  gl.getSupportedExtensions().forEach(extension => console.log(extension));
  console.groupEnd();
  let debugInfo = gl.getExtension("WEBGL_debug_renderer_info");
  if (debugInfo) {
    console.groupCollapsed("Debug Info");
    console.log(`Unmasked Vendor: ${gl.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL)}`);
    console.log(`Unmasked Renderer: ${gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL)}`);
    console.groupEnd();
  }
  console.groupEnd();
}

const canvas = document.getElementsByTagName("canvas")[0],
  ctx = canvas.getContext("webgl");

printContextInfo(ctx);
<canvas width="100" height="100"></canvas>