从 Web 浏览器进行 Win API 调用?

Making Win API calls from web browser?

我想知道是否可以(以及如何)使用 JavaScript 从 Web 浏览器进行一些 Win32 API 调用。我目前对此事的理解使我得出结论,我需要某种 ActiveX 控件,然后可以使用它轻松地进行所需的调用。然而,网络上的文章警告我使用 ActiveX 不是跨浏览器的解决方案。现在我不想强迫我的用户只使用 IE,据我所知,这是唯一支持 ActiveX 的浏览器。不过,我确实想让 Windows 用户可以使用此功能。

我想要的是获取当前登录的用户和他的 SID,并将此信息发送到 Web 应用程序,该应用程序将处理此数据,将其存储到数据库等。另外,我可能需要一些调用来访问硬件连接到客户端计算机的加密设备(即带有证书的 USB 令牌)。

如何获得?我需要为每个网络浏览器编写单独的插件吗?如果这一切都可以使用 C# 完成,那将是更好的选择,但原生 C++ 对我来说也不陌生,所以如果第一个不可能,我可以退回到后者。

如果没有在客户端计算机本身上运行的特定于浏览器的插件(ActiveX 控件可以做到),您所要求的是不可能的。

ActiveX 主要是一种仅适用于 InternetExplorer 的技术,但是过去已经有插件可以将 ActiveX 支持添加到其他浏览器。不确定他们中的任何一个是否随着时间的推移而幸存下来。但无论哪种方式,ActiveX 都是一项仅 Windows 的技术,因此它无法在其他平台上运行。

浏览器技术的当前趋势是尝试尽可能远离插件,转而依赖 HTML5 和 Java 脚本本身的内置功能。

AFAIK,我能想到的唯一跨浏览器解决方案是使用签名的 Java applet 通过 JNI 加载 DLL:

Load .DLL with applet and use it on client

然而,Java applet 不再流行以代替 Flash 和 HTML5,现在甚至有些浏览器默认禁用 Java。因此,如果您要针对广泛的受众,我认为这不是一个非常可行的解决方案。但对于孤立的观众来说,这可能是一个可行的选择。