有没有办法让我可以通过JavaScript使用单独的程序生成值?

时间:2012-11-29 02:00:25

标签: javascript html

有没有办法让我可以通过JavaScript使用单独的程序生成值?

我对网页设计和JavaScript都很陌生,所以我不确定是否可以做我想做的事情。我知道由于安全问题,其中一些故意难以做到(被阻止?)。我不需要实际的书面解决方案,而是需要或不可能的确认,以及可能用于它的相应API /函数集。

我希望有一个网页,它使用第三方JavaScript API函数,这些函数基于在访问网站的设备上的单独程序中生成的值,该网站与外部设备通信。我希望这是一个持续的过程;网页打开后,应继续监控值并根据需要更新呼叫。

某种直接交互会更好(有没有办法传递一个回调函数?),但到目前为止我还没有看到任何看起来可以做到这一点的东西。 有可能做一些事情,比如将值写入程序端的XML文件,并有一个循环,重复地重新读取网页上的文件?我不知道这对我想要的东西来说足够快。

我并不担心与各种浏览器或其他任何东西的兼容性,因此即使使用类似于很少支持的HTML5语法的解决方案也没关系,只要我能够使用一个可以使用的浏览器。

3 个答案:

答案 0 :(得分:1)

您可以让外部应用程序在服务器上公开某种Web界面,然后让客户端通过Javascript执行AJAX请求以从Web界面提取新数据。

答案 1 :(得分:0)

这实际上是一个非常非常好的问题。有些人可能已经撇去它,并且看起来像很多其他新手 - 误解 - 网络类型的问题。但这实际上是不同的:

  

我希望有一个网页,它使用基于值的第三方JavaScript API函数   正在谈论的是在访问网站的设备上的单独程序中生成   到外部设备

粗体部分是让它与众不同的原因。

是的,这是可能的。这是Flash和Java插件可以访问您的网络摄像头和麦克风的方式。但这并不容易。

首先,这不是您通常的基于服务器的交互(如果是这样,它会更简单,许多网络开发人员会对另一个新手提出这样的问题感到非常恼火)。您基本上希望您的Web应用程序可以访问用户计算机上的硬件。

  

我并不担心与各种浏览器或其他任何东西的兼容性

好,这使它更简单一点。因为Web API根本不处理这类事情。您需要对浏览器进行低级访问。

你基本上有两个选择:

  1. 如果Flash或Java支持访问您尝试访问的硬件,那么您可以尝试在Flash或Java中编写applet。在这两者中,Java对于希望执行低级别,非标准内容的程序员来说稍微友好一些。但是Flash通常对用户更友好(出于某种原因,Java applet到今天往往很庞大,需要很长时间才能加载)。

  2. 如果您无法在Flash或Java中执行所需操作,那么您实际上只有另一个选项:编写浏览器插件。为此,有两种选择(注意:我之前从未这样做过,所以我只是按照我所读过的方式)。首先,您可以基于旧的Netscape Plugin API开发插件。谷歌周围要了解更多。对于Windows上的IE,您可以选择开发ActiveX插件。你也可以尝试谷歌。

    一些谷歌搜索引导我Firebreath这是一个跨浏览器的插件框架,可以编译为NPAPI和ActiveX。

    哦,还有第三种选择。对于Chrome和Firefox,您可以编写基于javascript的插件。虽然像IE上的ActiveX一样,插件不会跨浏览器兼容。我甚至不确定javascript插件API是否可以访问真正的低级硬件。

  3. 你要做的事情很有趣。没有多少人做过。但这是可行的。祝你好运。

答案 2 :(得分:0)

我喜欢伊万的想法。我就是这样做的:

在外部程序中,启动可以接受WebSocket连接的Web服务器。选择一个标准不常用的非常高的端口。对于做WebSockets,我喜欢node.jsSocket.IO,但是存在适用于Java,Python,Ruby等的WebSocket库。

然后让您的网页打开一个WebSocket到您当地运行的Web服务器,它可以非常快速地将数据流传输到您的JavaScript应用程序。请参阅Socket.IO上的示例,了解它是多么容易。每当您的外部程序获得一个新的数据时,它就会将其推送到您的网页,并且会使用新数据触发javascript回调。

更新:

由于您的其他程序是用C ++编写的,因此这个问题和答案可能很有趣:https://stackoverflow.com/questions/3916217/standalone-c-websocket-server-library