【发布时间】:2013-01-19 09:27:53
【问题描述】:
我在谈论谷歌浏览器的 Native Client ...
开发人员声称它可以在浏览器的沙箱中运行从 c/c++ 编译的本机代码。
他们描述了很多东西,但从来没有指出我需要什么......那么,如果我使用 CreateWindow 在我的应用程序中创建窗口,当我的 Native Client 应用程序加载到浏览器中时会出现这个窗口吗?
【问题讨论】:
我在谈论谷歌浏览器的 Native Client ...
开发人员声称它可以在浏览器的沙箱中运行从 c/c++ 编译的本机代码。
他们描述了很多东西,但从来没有指出我需要什么......那么,如果我使用 CreateWindow 在我的应用程序中创建窗口,当我的 Native Client 应用程序加载到浏览器中时会出现这个窗口吗?
【问题讨论】:
简而言之,没有。关于在 Chrome 中使用 Native Client 的应用需要了解的两个关键事项:
如果 Native Client 允许像 CreateWindow 这样的特定于操作系统的调用,它将不再独立于平台(并且还会带来安全风险)。
相反,Native Client 提供了一组独立于平台的 API,称为 Pepper 或 PPAPI,它们在所有受支持的操作系统(目前是 Mac OS、Windows、Linux 和 Chrome OS)上的工作方式相同。如前所述,使用 Native Client 的应用程序仍然是 Web 应用程序,因此 Pepper 提供了与 JavaScript 相同的可能性和限制。例如,您可以获取 URL 或要求用户获得全屏权限,但您不能从本地文件系统访问任何随机文件(应用程序特定的隔离本地存储是可能的;就像让用户上传文件供应用程序使用一样) .
将现有的 C 或 C++ 代码库迁移到 Native Client 非常类似于移植到不同的操作系统。您的应用应该使用 Pepper API 调用,而不是使用 Windows API 调用。
关于其他背景,可能值得注意的是Chrome Packaged Apps 可以请求访问chrome.* 命名空间中更广泛的APIs 集合。这些 API 包括 USB、套接字、打开新窗口等。仍然不允许 Chrome 打包应用进行特定于操作系统的调用,但它们可以访问更多的 API,所有这些 API 都是独立于平台的。
简而言之,如果您的应用可以与 Pepper API 和 chrome.* API 一起使用,那么您可以使用 Native Client 和 JavaScript 编写它,并且您将拥有一个在这四种 API 中以相同方式运行的应用上面提到的操作系统。如果您的应用无法使用这些 API,则 Chrome 中的 Native Client 不是正确的选择。
【讨论】:
好像没有。 这有点相关:http://ssj-gz.blogspot.com/2013/01/emscripten-qt-progress-faster-better.html。不过,它已被翻译成 javascript,并且仅适用于 QT。而且很慢。
【讨论】: