原文連接: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許可下提供的內容