【问题标题】:Making Win API calls from web browser?从 Web 浏览器进行 Win API 调用?
【发布时间】:2021-11-13 10:50:10
【问题描述】:

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

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

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

【问题讨论】:

  • 为什么需要用户的 SID?那不是很便携。至于用户登录的用户名,在你的 web 应用中使用 NTLM 身份验证怎么样?
  • @RemyLebeau 的想法是创建一个与 Windows 登录一起使用的单点登录系统。您登录到 windows,打开网站,网站通过您的 windows 登录识别您,瞧,您已通过身份验证。我不想将此功能限制为仅限 AD,这就是我需要自定义解决方案的原因。
  • @RemyLebeau 还有,这是 Internet 应用程序,我认为 NTLM 在这里不是一个可行的选择。

标签: javascript winapi plugins cross-browser activex


【解决方案1】:

如果没有在客户端机器上运行的特定于浏览器的插件(ActiveX 控件可以),您所要求的就不可能实现。

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

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

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

Load .DLL with applet and use it on client

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

【讨论】:

  • 如果我使用一个签名的 Java 小程序,我会用它来调用我在 C++ 中创建的某个 DLL 的导出,它可以给我想要的信息?那不是跨浏览器兼容吗?
  • 这感觉像是一个跨浏览器的解决方案,肯定会回答我的问题。请添加说明作为答案,以便我将其标记为已接受。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-07
  • 2012-07-11
  • 2013-01-14
  • 2012-10-16
  • 1970-01-01
  • 2017-01-27
  • 1970-01-01
相关资源
最近更新 更多