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

时间:2015-09-13 09:34:28

标签: javascript c# dll

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

但现在客户希望在多个浏览器中进行相同的操作,即不支持ActiveX控件的Mozilla Firefox和Chrome。能否请您了解如何从浏览器调用客户端DLL方法?

3 个答案:

答案 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:

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

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