1

有什么方法可以让 JavaScript 可以使用由单独程序生成的值吗?

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

我想要一个网页,它使用第三方 JavaScript API 函数,该函数基于访问网站的设备上的单独程序中生成的值,该设备正在与外部设备通信。不过,我希望这是一个持续的过程;一旦网页打开,它应该继续监控值并酌情更新调用。

某种直接交互会更可取(有没有办法传入回调函数或其他东西?),但到目前为止我还没有看到任何看起来可以做到这一点的东西。是否可以在程序端将值写入 XML 文件,并在网页端重复读取文件?我不知道这对于我想要的来说是否足够快。

我不担心与大量浏览器或任何东西的兼容性,所以即使是使用很少支持的 HTML5 语法的解决方案也可以,只要我能得到一个可以运行的浏览器。

4

3 回答 3

1

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

于 2012-11-29T02:05:59.180 回答
0

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

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

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

更新:

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

于 2012-11-29T03:06:19.737 回答
0

这实际上是一个非常非常好的问题。有些人可能已经略过它,对他们来说,这看起来像是许多其他新手误解网络类型的问题。但这实际上是不同的:

我想要一个网页,它使用第三方 javascript API 函数,该函数基于访问网站的设备上的单独程序中生成的值,该设备正在与外部设备通信

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

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

首先,这不是你通常的基于服务器的交互(如果是的话,它会简单得多,并且许多 Web 开发人员会理所当然地对另一个新手提出这样的问题感到恼火)。您基本上希望您的 Web 应用程序能够访问用户机器上的硬件。

我不担心与大量浏览器或任何东西的兼容性

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

你基本上有2个选择:

  1. 如果 Flash 或 Java 支持访问您尝试访问的硬件,那么您可以尝试用 Flash 或 Java 编写小程序。在这两者中,Java 对想要做低级、非标准工作的程序员稍微友好一些。但是 flash 通常对用户更友好(出于某种原因,Java 小程序到今天往往很大并且需要很长时间才能加载)。

  2. 如果你不能在 Flash 或 Java 中做你想做的事,那么你真的只有一个选择:编写一个浏览器插件。为此,有两种选择(注意:我以前从未这样做过,所以我只按照我读过的内容进行)。首先是您可以基于旧的 Netscape Plugin API 开发插件。谷歌周围以了解更多信息。对于 Windows 上的 IE,您可以选择开发 ActiveX 插件。你也可以尝试用谷歌搜索。

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

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

您正在尝试做的事情很有趣。没有多少人做过。但这是可行的。祝你好运。

于 2012-11-29T02:40:28.697 回答