Native Client模块是否可以呈现由C++代码生成的HTML
Can a Native Client module render HTML generated by C++ code?
我有一些数据分析代码,可以处理输入文件并输出HTML和/或SVG。它是C++和CPU密集型的。
我想创建一个浏览器插件,这样我的代码就可以在不离开浏览器的情况下使用。Google的Native Client框架和Pepper API听起来很有趣,但可能有点过于严格。从本机客户端模块,是否可以通过Pepper执行以下操作?
-
访问用户文件系统上的本地文件。我知道NaCl沙箱通常可以防止这种情况,但肯定有办法通过用户选择的文件从Javascript层向下到NaCL?
-
将HTML或SVG输出回浏览器。C++有什么方法可以修改包含文档的DOM吗?
我对(1)不太确定,但(2)肯定不直接可能。
对于(1),Pepper API应该允许文件拾取器将文件提供给NaCl模块,就像WebFS允许JavaScript一样。我不确定这方面的实施情况。
对于(2),C++代码不能直接操作DOM。然而,NaCl模块可以使用PostMessage接口将字符串发送到JavaScript代码,然后JavaScript代码可以进行实际的DOM操作。请注意,在Chrome中,NaCl模块是事件处理程序。这意味着,如果计算是由某个事件启动并同步运行的(这是CPU密集型的),则会导致浏览器失去交互响应能力,或者变得不稳定,因为事件处理程序需要很长时间才能返回。更好的方法是生成一个后台线程来完成事件处理程序中的工作(或唤醒一个工作线程),然后立即从事件处理程序返回。当计算完成并准备好结果时,PostMessage会返回结果,让JavaScript线程唤醒(再次作为事件处理程序)并进行DOM操作。请注意,当前PostMessage必须在主线程上调用,因此工作线程必须使用CallOnMainThread来唤醒主事件处理程序线程,以便它可以依次执行PostMessage。
延续传球风格不是很有趣吗?
-
可以使用文件输入元素和JavaScript将文件上传到HTML文件系统,然后可以通过JavaScript和NaCl对其进行操作。
nacl_io
库实现了标准的posix方法,如fread
,因此一旦保存了文件,它就非常直接了。JS请参见此处(不要被弃用消息所拖延,它是在Chrome中实现的),NaCl请参见此处。 -
正如
@Bennet Yee
所提到的,NaCl模块不能修改页面,而是将消息传递回浏览器窗口,由JavaScript处理。听起来您可能想要传回一些JSON数据。请参阅此处查看谷歌关于消息系统的文档。
- LLVM |如何实现逻辑非操作的 IR 代码生成
- C++基于输入参数的动态代码生成
- C++使用代码生成错误
- C++代码生成核心文件,就像 gdb >> gcore 一样
- 卤化物:X86汇编代码生成
- 如何将 MATLAB 图像处理库内置函数转换为 MATLAB 编码器代码生成不支持的 C++?
- 为什么我的代码为同一代码生成不同的值
- 我应该担心动态代码生成与用C++编写的其他模块不匹配吗?
- 企业架构师 - 单独的代码生成标头和实现
- C++ 代码生成和模板专用化
- IBM Rhapsody c++ 代码生成 - 为什么总是在状态图周围放置一个活动状态
- 如何从 c++ 代码生成 arm64-v8a 64 位共享对象?
- 在语法文件上运行C 的ANTL4解析器显示错误33:缺少代码生成模板非局部trrefheader
- 使用LLVM在代码生成期间,更喜欢LLVM :: StringMap或STD :: MAP
- 如何根据模板参数制作代码生成
- 如何在C++中使用以下代码生成秒表/倒计时
- 为什么 C++ 和 Python 中的相同代码生成不同的输出?
- 获取 llvm::MCJIT 代码生成后的函数大小
- JIT代码生成后,如何检索LLVM ::指令地址
- clang和gcc为相同的代码生成不同的逻辑.哪个是正确的