原文连接:https://developer.chrome.com/native-client/devguide/distributingcss
注意:已针对ChromeOS之外的平台公布了此处所述技术的弃用。
请访问咱们的 迁移指南 了解详情。html
本文档介绍如何经过Chrome Web Store(CWS)在Web上分发Portable Native Client应用程序和Native Client应用程序 。web
默认状况下,为网页启用Portable Native Client,所以不须要单独的分发步骤。使PNaCl成为Web应用程序的一部分就像嵌入指向pexe的清单文件同样简单。有关详细信息,请参阅 技术概述。chrome
使用Web应用程序分发PNaCl模块的惟一约束是遵循同源策略。PNaCl清单和 pexe必须使用HTML从同一域提供,或者应使用CORS机制将它们安全地托管在不一样的域上。json
NaCl模块仅容许经过Chrome Web Store(CWS)分发的应用程序 CWS要求已到位,以防止针对特定体系结构(例如,x86-32,x86-64或或更高版本)编译的Native Client可执行文件(nexe)的扩散臂)。数组
一般,经过Chrome Web Store分发应用程序的注意事项和指南也适用于包含NaCl模块的应用程序。如下是相关文档的几点建议:浏览器
在本文档中,咱们将仅关注特定于包含NaCl模块的应用程序的分发问题。安全
Chrome应用是Chrome网上应用店中托管的特殊zip文件(扩展名为.crx)。此文件包含全部应用程序部分:Chrome Web Store清单文件(manifest.json),图标和全部常规Native Client应用程序文件。有关建立Chrome应用的详细信息,请参阅Chrome应用。架构
减小用户下载包的大小app
提示: 在多平台zip文件中打包应用程序能够显着下降应用程序的下载和存储要求。
如上所述,要将Chrome应用程序上传到CWS,您必须建立一个包含应用程序所需资源的zip文件,包括用于多种体系结构的.nexe文件(x86-64,x86-32和ARM)。在Chrome 28以前,当用户安装您的应用时,他们必须从CWS下载.crx文件,其中包含全部包含的.nexe文件。
从Chrome 28开始,Chrome网上应用店包含一项称为 多平台zip文件的功能。此功能容许您以减小用户下载包大小的方式构建应用程序目录和zip文件。如下是此功能的工做原理:
如下是如何使用此功能:
建立一个名为的目录_platform_specific
。将此目录放在CWS清单文件所在的同一级别 manifest.json
。
为您支持的每一个特定体系结构建立子目录,并在相关子目录中添加每一个体系结构的文件。
这是一个示例app目录结构:
|-- my_app_directory/ | |-- manifest.json | |-- my_app.html | |-- my_module.nmf | +-- css/ | +-- images/ | +-- scripts/ | |-- _platform_specific/ | | |-- x86-64/ | | | |-- my_module_x86_64.nexe | | |-- x86-32/ | | | |-- my_module_x86_32.nexe | | |-- arm/ | | | |-- my_module_arm.nexe | | |-- all/ | | | |-- my_module_x86_64.nexe | | | |-- my_module_x86_64.nexe | | | |-- my_module_x86_32.nexe
请注意有关app目录结构的一些要点:
特定于体系结构的子目录:
能够有任意名字;
必须直接在_platform_specific
目录下; 和
必须列在CWS清单文件中(参见下面的步骤3)。
您能够包含一个fallback子目录,该子目录提供包含全部特定于体系结构的文件的下载包。(在上面的示例中,这是all/
子目录。)若是用户具备不支持多平台zip文件的早期版本的Chrome(Chrome 28以前),则使用此文件夹。
您不能直接在文件夹中包含任何文件 _platform_specific
。全部特定于体系结构的文件必须位于特定于体系结构的子目录之下。
_platform_specific
全部下载包中都包含不在该目录下的文件。(在上面的例子中,包括my_app.html
,my_module.nmf
和css/
,images/
和scripts/
目录。)
修改CWS清单文件,manifest.json
以便它指定哪一个子目录_platform_specific
对应于哪一个体系结构。
CWS清单文件必须包含新名称/值对,其中名称为platforms
,值为数组。该数组具备每一个Native Client体系结构的对象,具备两个名称/值对:
名称 | 值 |
---|---|
nacl_arch |
x86-64 ,x86-32 或arm |
sub_package_path |
_platform_specific 包含指定NaCl体系结构文件的目录路径(以...开头) |
这是一个示例manifest.json
文件:
{ "name": "My Reminder App", "description": "A reminder app that syncs across Chrome browsers.", "manifest_version": 2, "minimum_chrome_version": "28", "offline_enabled": true, "version": "0.3", "permissions": [ {"fileSystem": ["write"]}, "alarms", "storage" ], "app": { "background": { "scripts": ["scripts/background.js"] } }, "icons": { "16": "images/icon-16x16.png", "128": "images/icon-128x128.png" }, "platforms": [ { "nacl_arch": "x86-64", "sub_package_path": "_platform_specific/x86-64/" }, { "nacl_arch": "x86-32", "sub_package_path": "_platform_specific/x86-32/" }, { "nacl_arch": "arm", "sub_package_path": "_platform_specific/arm/" }, { "sub_package_path": "_platform_specific/all/" } ] }
请注意上面CWS清单文件中的最后一个条目,它指定了 sub_package_path
没有相应的文件nacl_arch
。此条目标识回退目录,若是用户体系结构与列出的任何NaCl体系结构不匹配,或者用户使用的旧版Chrome不支持多平台zip文件,则该目录包含在下载包中。
根据须要修改应用程序,以便将文件用于正确的用户体系结构。
要引用特定于体系结构的文件,请使用JavaScript API chrome.runtime.getPlatformInfo()。举个例子,若是你在目录体系结构相关的文件 x86-64
,x86-32
以及arm
,你可使用下面的JavaScript代码来建立这些文件的路径:
function getPath(name) { return '_platform_specific/' + chrome.runtime.getPlatformInfo().nacl_arch + '/' + name; }
测试您的应用程序,建立一个zip文件,并像之前同样将应用程序上传到CWS。
Chrome应用的其余注意事项
托管和打包的应用程序在CWS清单中有一个“启动”参数。此参数仅在应用(不是扩展程序)中显示,并告知Google Chrome在用户启动已安装的应用时要显示的内容。例如:
"launch": { "web_url": "http://mail.google.com/mail/" }
封装应用的特定于NaCl的注释也 适用于扩展。
.html文件,.nmf文件(Native Client清单文件)和.nexe文件必须从同一个域提供,Chrome Web Store清单文件必须指定正确的,通过验证的域。其余文件能够从相同或其余域提供。
此外,请参阅Chrome应用的其余注意事项。
若是您但愿Chrome使用Native Client模块显示特定类型的内容,则能够将该内容的MIME类型与Native Client模块相关联。使用nacl_modules
Chrome网上应用店清单文件中的属性将Native Client模块注册为一种或多种特定MIME类型的处理程序。例如,下面代码段中的粗体代码将Native Client模块注册为OpenOffice电子表格MIME类型的内容处理程序:
{ "name": "My Native Client Spreadsheet Viewer", "version": "0.1", "description": "Open spreadsheets right in your browser.", "nacl_modules": [{ "path": "SpreadsheetViewer.nmf", "mime_type": "application/vnd.oasis.opendocument.spreadsheet" }] }
“path”的值是应用程序目录中Native Client清单文件(.nmf)的位置。有关Native Client清单文件的详细信息,请参阅清单文件。
“mime_type”的值是您但愿Native Client模块处理的特定MIME类型。每种MIME类型只能与一个.nmf文件关联,但单个.nmf文件可能会处理多种MIME类型。如下示例显示了一个扩展,其中包含两个处理三种MIME类型的.nmf文件。
{ "name": "My Native Client Spreadsheet and Document Viewer", "version": "0.1", "description": "Open spreadsheets and documents right in your browser.", "nacl_modules": [{ "path": "SpreadsheetViewer.nmf", "mime_type": "application/vnd.oasis.opendocument.spreadsheet" }, { "path": "SpreadsheetViewer.nmf", "mime_type": "application/vnd.oasis.opendocument.spreadsheet-template" }, { "path": "DocumentViewer.nmf", "mime_type": "application/vnd.oasis.opendocument.text" }] }
该nacl_modules
属性是可选的 - 仅当您但愿Chrome使用Native Client模块显示特定类型的内容时才指定此属性。
CC-By 3.0许可下提供的内容