我在谈论谷歌浏览器的 Native Client 东西......
开发人员声称它可以在浏览器的沙箱中运行从 c / c++ 编译的本机代码。
他们描述了很多东西,但从来没有指出我需要什么......所以,如果我使用 CreateWindow 在我的应用程序中创建窗口,当我的 Native Client 应用程序加载到浏览器中时会出现这个窗口吗?
2 回答
简而言之,没有。关于在 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 打包应用程序可以请求访问命名空间中更广泛的APIchrome.*
集。这些 API 包括 USB、套接字、打开新窗口等。仍然不允许 Chrome 打包应用程序进行特定于操作系统的调用,但它们可以访问更多的 API,所有这些 API 都是独立于平台的。
简而言之,如果您的应用程序可以使用 Pepper API 和 chrome.* API,您可以使用 Native Client 和 JavaScript 编写它,并且您将拥有一个在上述四种操作系统中以相同方式运行的应用程序多于。如果您的应用无法使用这些 API,那么 Chrome 中的 Native Client 不是正确的选择。
似乎没有。这有点相关:http ://ssj-gz.blogspot.com/2013/01/emscripten-qt-progress-faster-better.html 。不过,它已被翻译成 javascript,并且仅适用于 QT。而且慢。