我得到了客户的要求,当任何用户刷卡时,他们的详细信息应该在客户端自动捕获到网页中。然而,我们在IE中通过在C#中创建ActiveX控件来做同样的事情。卡服务提供商在客户端和ActiveX控件上安装他们的DLL,我们可以调用他们的DLL并获取详细信息。
但现在客户希望在多个浏览器中进行相同的操作,即不支持ActiveX控件的Mozilla Firefox和Chrome。能否请您了解如何从浏览器调用客户端DLL方法?
答案 0 :(得分:2)
你能做到的唯一方法就是使用NPAPI - 例如,像Java插件这样的“浏览器插件”。 NPAPI插件可以完全,无限制地访问客户端计算机。
但请注意,Chrome正在放弃对NPAPI插件的支持(事实上,已经在Linux中已经有了,很快就会在Windows下),所以即使你写了一个NPAPI插件并让人们安装它,不久它们就不会了能够在Chrome中使用它。同样,您的ActiveX解决方案将无法在更现代的IE版本中运行,因为IE不再支持它们。
简而言之:您无法在现代浏览器中执行此操作。相反,您需要创建用户下载和安装的程序。该程序可以包含托管浏览器控件,或者您可以尝试使用操作系统的应用程序自动界面(如果有的话)来查找浏览器窗口并将信息粘贴到其中。当然,每个操作系统都会有所不同。
答案 1 :(得分:2)
我必须做同样的事情,我已经使用EdgeJS完成了它。您可以在Call Function from DLL loaded in front-end javascript (load dll in clientside javascript)找到答案。
首先,我使用activex进行IE浏览。然后,我不得不将它移植到其他浏览器。诀窍是在V8和CLR之间编组函数,当事件触发时,您将消息发送到javascript。
dll将委托函数作为接收处理程序返回。您使用发送处理程序初始化dll。我还没有找到一种从浏览器运行dll的方法,就像使用ActiveX一样。
出于安全原因,您可能无法在客户端javascript中嵌入和运行dll。
stackoverflow问题中的解决方案是在具有Swipe Reader的客户端计算机上运行的节点进程。客户端应用程序连接到运行websocket服务器的节点进程,并通过websocket消息进行通信。我想你可以在每个平台(Win,Unix,MacOS)上移植它。
另一个解决方案是构建一个C#应用程序(仅当您使用.NET时为Windows,如果您只使用CoreCLR,则为所有平台),该应用程序将侦听滑动并触发事件以在所有连接的websockets上发送数据。
答案 2 :(得分:1)
经过一些链接后,似乎可以通过以下选项。
选项1:
Calling a .dll function from a html page that runs on chrome and firefox
选项2:
使用NPAPI为这些浏览器创建插件。
How to write a browser plugin?
选项3:
编写已签名的applet来调用从html或任何Web应用程序运行的dll。它几乎在所有浏览器上运行。 这是样本
的链接http://www.javaworld.com/javaworld/jw-10-1998/jw-10-apptowin32.html