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