2017-10-20 239 views
0

我正面临着一个让我迷失的问题。我需要将外部设备连接到我的html5网络应用程序,但我不知道该怎么做。不幸的是,与这个设备通信的唯一方法是使用供应商提供的DLL(可以通过以太网本身与设备进行迭代)。我知道一个办法是通过实现一个asp web服务客户端,但我不想开发另一个“应用程序”。有没有办法直接从我的网页做到这一点?您好, 感谢您。使用dll进入html5页面

编辑: 我的webapp是一个零售前端html5应用程序使用jquery编写而不是仅在chrome上运行(因为脱机缓存/ websql数据库)。用户在被请求时需要将数据发送到连接的外部设备(信用卡支付系统)并接收答案:唯一的沟通方式是使用供应商的dll。

+0

Web应用程序不能直接与DLL文件或硬件设备接口。您需要在客户端计算机上安装应用程序。 – TidyDev

+0

您的“网络应用程序”绑定在由网络服务器提供的典型浏览器中执行吗?如果是的话,答案完全不同,如果你说不...... – Harry

回答

0

我可以想象几种不同的方式来得到你的目标:

ActiveX和NPAPI插件都在这里提到的 - 这些都是非常过时,你不需要甚至打开链接

[过时的答案] Call DLL methods from Javascript

的其他方法的一些集合:

[火狐相关] How to call user32.dll methods from javascript

[较新的答案] Call Function from DLL loaded in front-end javascript (load dll in clientside javascript)

[IE唯一的 - 的ActiveX] https://msdn.microsoft.com/de-de/library/7sw4ddf8(v=vs.94).aspx

最后但并非最不重要的我最喜欢的国家的最先进的方法:开发一个本地运行的系统托盘的应用程序或Windows服务监听端口,允许跨域调用,并在使用JavaScript调用Ajax时触发内容。

[编辑]这最后一个选项也是跨平台兼容和相当便携。为了说明,这个“在客户端运行”的windows服务可以在127.0.0.1:1234上监听,并且应该只是将Access-Control-Allow-Origin:*添加到它发送的任何响应中,这样你就可以使用ajax调用127.0 .0.1:1234调用它。您打包并将其分发到可下载的安装程序包中。在你的javascript中,你在初始化时做了一个测试api调用,看看这个包是否已安装并可用。如果不是,则显示下载链接。 如果运行的任务栏中的应用程序,您还提供了一个“我已经拥有它,只是启动”按钮,并在注册表中注册一个应用程序处理器(那是另一个话题)

在结束时,如果你不想去任何类型的编译应用程序,选项的数量快速褪色,你需要解释更多为什么你只想使用JavaScript(例如,这是因为你不知道任何其他语言或如此)

+0

感谢您宝贵的回答哈利!我之所以没有其他编译好的应用程序,是因为我开发的Web应用程序(仅在chrome上运行)是安装在数百台计算机上的FrontEnd应用程序,难以维护另一个开发线。 开发一个系统托盘应用程序或Windows服务应该是一个很好的折衷方案(由于IIS等,客户端Web服务确实没有考虑到我; Windows服务更灵活,更容易),但我怎么能他们之间的沟通?超过html5的套接字似乎不再使用。 –

+0

是的,我也不会使用websockets。 Ajax很好地完成了这项工作。我在接收tasktray应用程序时做的是在固定高端端口上使用此示例在此处侦听新连接https://www.codeproject.com/Articles/17071/Sample-HTTP-Server-Skeleton-in-C。然后,我只是添加了Access-Control-Allow-Origin:“*”给我发送的每个响应,并且瞧,阿贾克斯能够发送和接收来自我的服务的东西。 – Harry

+0

非常感谢你,哈利,我不知道在windows服务中实现一种http服务器的机会,这肯定会为我做好这个工作!在我的frontEnd应用程序中,我将轻松检查服务是否已安装/运行并提供“下载服务安装程序”。感谢示例代码,竖起大拇指! –