2

我有一些处理输入文件并输出 HTML 和/或 SVG 的数据分析代码。它是 C++ 和 CPU 密集型的。

我想创建一个浏览器插件,这样我的代码就可以在不离开浏览器的情况下使用。Google 的 Native Client 框架和 Pepper API 听起来很有趣,但可能限制性太强了。从 Native Client 模块是否可以通过 Pepper 执行以下操作?

  1. 访问用户文件系统上的本地文件。我知道 NaCl 沙箱通常会阻止这种情况,但肯定有办法将用户选择的文件从 Javascript 层传递到 NaCL 中?

  2. 将 HTML 或 SVG 输出回浏览器。C++ 有什么方法可以修改包含文档的 DOM?

4

2 回答 2

4

我不太确定(1),但(2)绝对不是直接可能的。

对于 (1),Pepper API 应该允许文件选择器使文件可用于 NaCl 模块,就像 WebFS 允许它用于 JavaScript 一样。我不确定这个的实施状态。

对于 (2),C++ 代码不能直接操作 DOM。但是,NaCl 模块可以使用 PostMessage 接口将字符串发送到 JavaScript 代码,然后可以执行实际的 DOM 操作。请注意,在 Chrome 中,NaCl 模块是事件处理程序。这意味着如果计算由某个事件启动并同步运行(并且它是 CPU 密集型的),它将导致浏览器失去交互响应能力,或者变得卡顿,因为事件处理程序需要很长时间才能返回。更好的方法是生成一个后台线程来完成事件处理程序中的工作(或唤醒工作线程),并立即从事件处理程序返回。当计算完成并准备好结果时,PostMessage 将结果返回以让 JavaScript 线程唤醒(再次作为事件处理程序)并进行 DOM 操作。

连续传球风格不是很有趣吗?

于 2012-02-03T00:25:55.653 回答
0
  1. 可以使用文件输入元素和 JavaScript 将文件上传到 HTML 文件系统,然后由 JavaScript 和 NaCl 操作它。该nacl_io库实现了标准的 posix 方法,例如fread,因此一旦您保存了文件,它就非常简单了。在这里查看JS(不要被弃用消息推迟,它是在 Chrome 中实现的),这里是 NaCl。

  2. 如前所述@Bennet Yee,NaCl 模块不能修改页面,而是将消息传递回由 JavaScript 处理的浏览器窗口。听起来您可能想要传回一些 JSON 数据。有关消息传递系统的 Google 文档,请参见此处

于 2016-02-17T08:20:38.840 回答