需要从浏览器调用客户端DLL

我得到了客户的要求,当任何用户刷卡时,他们的详细信息应该在客户端自动捕获到网页中。 然而,我们在IE中通过在C#中创建ActiveX控件来做同样的事情。 卡服务提供商在客户端和ActiveX控件上安装他们的DLL,我们可以调用他们的DLL并获取详细信息。

但现在客户希望在多个浏览器中进行相同的操作,即Mozilla Firefox和Chrome,它们不支持ActiveX控件。 你能告诉我如何从浏览器调用客户端DLL方法吗?

你可以做到的唯一方法是使用NPAPI – 例如,像Java插件这样的“浏览器插件”。 NPAPI插件可以完全,不受限制地访问客户端计算机。

但请注意,Chrome正在放弃对NPAPI插件的支持(事实上,已经在Linux中已经有了,很快就会在Windows下),所以即使你编写了一个NPAPI插件并让人们安装它,不久它们也无法使用它在Chrome中。 同样,您的ActiveX解决方案将无法在更现代的IE版本中运行,因为IE不再支持它们。

简而言之:您无法在现代浏览器中执行此操作。 相反,您需要创建用户下载和安装的程序。 该程序可以包含托管浏览器控件,或者您可以尝试使用操作系统的应用程序自动界面(如果有的话)来查找浏览器窗口并将信息粘贴到其中。 当然,每个操作系统都会有所不同。

我必须做同样的事情,我已经使用EdgeJS完成了它。 你可以在前端javascript中加载DLL的Call Function中找到答案(在clientside javascript中加载dll) 。
起初,我使用activex进行IE浏览。 然后,我不得不将其移植到其他浏览器。 诀窍是在V8和CLR之间编组function,当事件触发时,您将消息发送到javascript。

dll将委托函数作为接收处理程序返回。 您使用发送处理程序初始化dll。 我还没有找到一种从浏览器运行dll的方法,就像使用ActiveX一样。

可能是出于安全原因,您可能无法在客户端javascript中嵌入和运行dll。

stackoverflow问题中的解决方案是在具有Swipe Reader的客户端计算机上运行的节点进程。 客户端应用程序连接到运行websocket服务器的节点进程,并通过websocket消息进行通信。 我想你可以在每个平台(Win,Unix,MacOS)上移植它。

另一个解决方案是构建一个C#应用程序(仅当您使用.NET时为Windows,如果您只使用CoreCLR,则为所有平台),它会侦听滑动并触发事件以在所有连接的websockets上发送数据。

经过一些链接后,似乎可以通过以下选项。

选项1:

  • Firefox允许您创建XPI扩展名为“addon”
  • Chrome有扩展程序

从运行在chrome和firefox上的html页面调用.dll函数

选项2:

使用NPAPI编写这些浏览器的插件。

如何编写浏览器插件?

选项3:

编写已签名的applet来调用从html或任何Web应用程序运行的dll。 它几乎可以在所有浏览器上运行 这是样本的链接

http://www.javaworld.com/javaworld/jw-10-1998/jw-10-apptowin32.html