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

Javascript 需要从浏览器调用客户端DLL,javascript,c#,dll,Javascript,C#,Dll,我收到了客户的要求,当任何用户刷卡时,他们的详细信息都应该在客户端的网页中自动捕获。然而,通过在C#中创建ActiveX控件,我们在IE中也做了同样的事情。卡服务提供商在客户端安装他们的DLL,我们可以通过ActiveX控件调用他们的DLL并获取详细信息 但现在客户端希望在多个浏览器中执行相同的操作,即Mozilla Firefox和Chrome,它们不支持ActiveX控件。您能告诉我如何从浏览器调用客户端DLL方法吗?唯一可以这样做的方法是使用NPAPI,例如,像Java插件一样的“浏览器插

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


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

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

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


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

在浏览了一些链接后,似乎可以通过以下选项实现

备选案文1:

  • Firefox允许您创建XPI扩展,也称为“插件”
  • Chrome具有扩展功能

备选案文2:

为使用NPAPI编写的浏览器创建插件

备选案文3:

编写签名小程序以调用从html或任何web应用程序运行的dll。它几乎可以在所有浏览器上运行。 这是示例的链接


我必须做完全相同的事情,我用EdgeJS做过。你可以在网站上找到答案。
起初,我在IE中使用activex。然后,我不得不将它移植到其他浏览器。诀窍是在V8和CLR之间封送函数,当事件触发时,将消息发送到javascript


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


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

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


另一个解决方案是构建一个C#应用程序(如果您使用.NET,则仅限windows;如果您仅使用CoreCLR,则限所有平台),该应用程序侦听滑动并触发事件以在所有连接的WebSocket上发送数据

在我们的情况下,客户端将仅限于windows。您是否可以与我们分享操作系统的应用程序自动接口或方法的任何示例,以及我们可以尝试在我们这边实现的示例。@AnkushBindra:这是一个完全不同的问题,您应该将其作为一个问题发布。我不是自动化windows的专家。我知道有一种方法可以通过应用程序窗口的标题找到它们,也有一种方法可以向它们发送击键,但不知道细节。实际上,所有平台上的Chrome都已经放弃了对NPAPI的支持。@smorgan:啊,是的,13天前。(现在已经是9月了吗?!)选项2和3在当前的Chrome版本中都不起作用。通过Chrome扩展(选项1)直接实现这一点的唯一方法是绑定一个NPAPI插件,因此这实际上只是选项2的一个变体,也不会起作用……而且我不相信Chrome允许扩展使用任意DLL。不知道XPI加载项。可能重复