我想知道是否可以(以及如何)使用 JavaScript 从 Web 浏览器进行一些 Win32 API 调用。我目前对此事的理解使我得出这样的结论:我需要某种 ActiveX 控件,然后可以使用它轻松地进行所需的调用。然而,阅读整个网络上的文章警告我,使用 ActiveX 并不是一个跨浏览器的解决方案。现在我不想强制我的用户只使用 IE,据我所知,这是唯一支持 ActiveX 的浏览器。不过,我确实想让此功能仅对 Windows 用户可用。
我想要的是获取当前登录的用户及其SID,并将此信息发送到Web应用程序,该应用程序将处理此数据,将其存储到数据库等。另外,我可能需要一些调用来访问硬件加密设备连接到客户端计算机(即带有证书的 USB token )。
如何获得这个?我需要为每个网络浏览器编写单独的插件吗?如果这一切都可以使用 C# 来完成,那就更好了,但原生 C++ 对我来说也不陌生,所以如果第一个不可能,我可以回退到后者。
最佳答案
如果没有在客户端计算机本身上运行的特定于浏览器的插件(ActiveX 控件可以做到这一点),您所要求的内容是不可能的。
ActiveX 主要是一种仅适用于 InternetExplorer 的技术,但是过去已经有插件可以向其他浏览器添加 ActiveX 支持。不确定他们中的任何一个是否随着时间的推移而幸存下来。但无论如何,ActiveX 都是 Windows 独有的技术,因此它无法在其他平台上运行。
当前浏览器技术的趋势是尝试尽可能远离插件,转而依赖 HTML5 和 JavaScript 本身的内置功能。</p>
据我所知,我能想到的唯一跨浏览器解决方案是使用签名的 Java 小程序通过 JNI 加载 DLL:
Load .DLL with applet and use it on client
然而,Java 小程序代替 Flash 和 HTML5 已经不再流行,甚至现在有些浏览器默认禁用 Java。因此,如果您想针对广泛的受众,我认为这不是一个非常可行的解决方案。但对于孤立的受众来说,这可能是一个可行的选择。
关于javascript - 从 Web 浏览器进行 Win API 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28728614/