當前位置: 華文世界 > 數碼

萬字元數:Chrome 瀏覽器外掛程式 V3 版本 Manifest.json 檔全欄位解析

2024-01-18數碼

Chrome 瀏覽器外掛程式 V3 版本 Manifest.json 檔全欄位解析

Manifest.json 檔格式

每個擴充套件程式的根目錄中都必須有一個 manifest.json 檔,其中列出了有關該擴充套件程式的結構和行為的重要資訊。

1、Demo 展示

1. 最小檔

{"manifest_version": 3,"name": "My Chrome Ext","version": "1.0.0","description": "Chrome Ext","icons": {"48": "icon-48.png","128": "icon-128.png"},}

2. 增加 content_scripts

{"manifest_version": 3,"name": "Run script automatically","description": "Add Context Scripts","version": "1.0","icons": {"16": "icon-16.png","32": "icon-32.png","48": "icon-48.png","128": "icon-128.png"},"content_scripts": [{"js": ["content-script.js"],"matches": ["http://*.example.com//"]}]}

3. 增加 service_worker

{"manifest_version": 3,"name": "Click to run","description": "Add Service Worker","version": "1.0","icons": {"16": "icon-16.png","32": "icon-32.png","48": "icon-48.png","128": "icon-128.png"},"background": {"service_worker": "service-worker.js"},"action": {"default_icon": {"16": "icon-16.png","32": "icon-32.png","48": "icon-48.png","128": "icon-128.png"}},"permissions": ["scripting", "activeTab"]}

4. 增加 action

{"manifest_version": 3,"name": "Popup extension that requests permissions","description": "Add Action","version": "1.0","icons": {"16": "icon-16.png","32": "icon-32.png","48": "icon-48.png","128": "icon-128.png"},"action": {"default_popup": "popup.html"},"host_permissions": ["https://*.example.com/"],"permissions": ["storage"]}

5. 增加側資訊看板

{"manifest_version": 3,"name": "Side panel extension","version": "1.0","description": "Extension with a default side panel.","icons": {"16": "images/icon-16.png","48": "images/icon-48.png","128": "images/icon-128.png"},"side_panel": {"default_path": "sidepanel.html"},"permissions": ["sidePanel"]}

二、Manifest.json 檔欄位及解析

1. Chrome 外掛程式所必需的 key

1.1 manifest_version

  • 一個整數,用於指定擴充套件程式使用的清單檔格式版本。
  • 唯一支持的值是 3。
  • 1.2 name

  • 一個字串,用於在 Chrome 市集、安裝對話方塊和使用者的 Chrome 擴充套件程式頁面 (chrome://extensions) 中標識擴充套件程式。
  • 長度上限為 45 個字元。
  • 1.3 version

  • 一個字串,用於標識擴充套件程式的版本號。
  • 一到四個以英文句點分隔的整數,用於標識此擴充套件程式的版本。下面幾條規則適用於整數: 整數必須介於 0 到 65,535 之間(含 0 和 65,535)。 非零整數不能以 0 開頭。例如,032 無效,因為它以零開頭。 它們不能都為零。例如,0 和 0.0.0.0 是無效的,而 0.1.0.0 是有效的。
  • 以下是有效版本的一些範例: "version": "1" "version": "1.0" "version": "2.10.2" "version": "3.1.2.4567"
  • 比較從最左邊的整數開始。然後,如果這些整數相等,則比較右側的整數,依此類推。例如,1.2.0 是比 1.1.9.9999 更新的版本。
  • 缺少的整數等於零。例如,1.1.9.9999 比 1.1 更新,1.1.9.9999 低於 1.2。
  • "manifest_version": 3,"name": "My Chrome Ext Name","version": "0.0.1",

    2. Chrome 市集所需的 key

    2.1 description

  • 一個 JSON 字串,用於描述 Chrome 網上套用店和使用者的擴充套件程式管理頁面上的擴充套件程式。
  • 長度上限為 132 個字元。
  • 2.2 icons

  • 一個或多個代表擴充套件程式的圖示。
  • 建議使用 PNG 檔,但允許使用其他檔格式(SVG 和 WebP 檔除外)。
  • 如果計劃在 Chrome 市集中分發擴充套件程式,則必須提供圖示。 圖示大小圖示的使用16x16擴充套件程式頁面和上下文選單上的網站圖示。32x32Windows 電腦通常需要此大小。48x48顯示在「擴充套件程式」頁面上。128x128安裝時會顯示在 Chrome 市集中。
  • {"manifest_version": 3,"name": "chrome extension","version": "0.0.1","description": "My Chrome Extension description","icons": {"16": "public/icons/icon_16.png","32": "public/icons/icon_32.png","48": "public/icons/icon_48.png","128": "public/icons/icon_128.png"}}

    3. Chrome 外掛程式可選 key

    3.1 action

  • 定義擴充套件程式圖示在 Google 工具列中的外觀和行為。
  • action 鍵(及其子項)是可選的。如果未添加此擴充套件程式,相應擴充套件程式仍會顯示在工具列中,以便使用者存取此擴充套件程式的選單。因此,建議始終至少包含 action 和 default_icon 鍵。
  • {"name": "Action Extension","action": {"default_icon": {"16": "images/icon16.png","24": "images/icon24.png","32": "images/icon32.png"},"default_title": "Click Me","default_popup": "popup.html"},}

    popup.html 是點選 chrome 按鈕彈出的頁面

    3.2 author

  • 指定用於建立擴充套件程式的帳號的電子郵件地址。
  • {"author": {"email": "[email protected]"},}

    3.3 background

  • 指定包含擴充套件程式的 Service Worker(充當事件處理常式)的 JavaScript 檔。
  • "background": {"service_worker": "service-worker.js","type": "module"}

    3.4 chrome_settings_overrides

  • 定義所選 Chrome 設定的替換項。
  • 設定覆蓋是擴充套件程式的一種覆蓋所選 Chrome 設定的方式。該 API 適用於 Windows 和 Mac 的所有目前版本的 Chrome。
  • search_provider、homepage 和 startup_pages 內容的所有值都可以使用 chrome.i18nAPI 進行本地化。
  • 對於外部擴充套件程式,可以使用登錄檔項對 search_provider、homepage 和 startup_pages 網址值進行參數化。
  • 可替換內容列表: alternate_urls(字串陣列,可選) 除 search_url. 之外,還可使用的網址格式列表 encoding(字串,可選) 用於搜尋字詞的編碼。如果沒有設定 prepopulated_id,則必須執行此操作。 favicon_url(字串,可選) 搜尋引擎的圖示網址。如果沒有設定 prepopulated_id,則必須執行此操作。 homepage(字串,可選) 首頁的新值。 image_url(字串,可選) 搜尋引擎用於圖片搜尋的網址。如果不這樣做,則表示引擎不支持圖片搜尋。 image_url_post_params(字串,可選) image_url 的 post 參數。 is_default(布爾值,必需) 指定是否應將搜尋服務提供商設定為預設搜尋引擎。 keyword(字串,可選) 搜尋引擎的多功能框關鍵字。如果沒有設定 prepopulated_id,則必須執行此操作。 name(字串,可選) 向使用者顯示的搜尋引擎的名稱。如果沒有設定 prepopulated_id,則必須執行此操作。 prepopulated_id(整數,可選) Chrome 內建搜尋引擎的 ID。 search_provider(物件,可選) 搜尋引擎。 search_url(字串,必需) 搜尋引擎使用的搜尋網址。 search_url_post_params(字串,可選) search_url 的 post 參數。 startup_pages(字串陣列,可選) 一個長度為 1 的陣列,其中包含將用作啟動頁的網址。 suggest_url(字串,可選) 搜尋引擎用於獲取建議的網址。如果未使用此內容,則引擎不支持建議。 suggest_url_post_params(字串,可選) suggest_url 的 post 參數。
  • {"manifest_version": 3,"name": "My extension","chrome_url_overrides" : {"PAGE_TO_OVERRIDE": "myPage.html"},}

    3.5 chrome_url_overrides

  • 定義預設 Chrome 網頁的替換項。
  • 3.5.1 擴充套件程式可以使用 HTML 覆蓋網頁來替換 Google Chrome 通常提供的網頁。

    擴充套件程式可以覆蓋以下任意網頁,但每個擴充套件程式只能覆蓋 1 個網頁:

  • 書簽 使用者從 Chrome 選單中選擇「書簽管理器」選單項(或者在 Mac 上)從「書簽」選單中選擇「書簽管理器」選單項時顯示的網頁。也可以透過輸入網址 chrome://bookmarks 來存取此頁面。
  • 歷史記錄 使用者從 Chrome 選單中選擇「歷史記錄」選單項(或在 Mac 上從「歷史記錄」選單中選擇「顯示全部歷史記錄」)時顯示的頁面。也可以透過輸入網址 chrome://history 來存取此頁面。
  • 新的分頁 使用者建立新分頁或視窗時顯示的頁面。也可以透過輸入網址 chrome://newtab 來存取此頁面。
  • {"manifest_version": 3,"name": "My extension","chrome_url_overrides" : {"PAGE_TO_OVERRIDE": "myPage.html"},}

    PAGE_TO_OVERRIDE 替換為以下項之一:

  • bookmarks
  • history
  • newtab
  • 3.6 commands

  • 定義擴充套件程式中的鍵盤快捷鍵。
  • commands API 可用於添加可觸發擴充套件程式中操作的鍵盤快捷鍵,例如,開啟瀏覽器操作或向擴充套件程式發送命令的操作。
  • 必須在 manifest.json 聲明 commands,才能使用此 API。
  • "commands": {"run-foo": {"suggested_key": {"default": "Ctrl+Shift+Y","mac": "Command+Shift+Y"},"description": "Run "foo" on the current page."}}

    3.7 content_scripts

  • 指定在使用者開啟某些網頁時要使用的 JavaScript 或 CSS 檔。
  • { "name": "My extension", "content_scripts": [ { "matches": ["https://*.nytimes.com/*"], "css": ["my- styles.css"], "js": ["content-script.js"] } ]}

    3.8 content_security_policy

  • 定義對擴充套件程式可以使用的指令碼、樣式和其他資源的限制。
  • 可以為擴充套件程式網頁和沙盒化擴充套件程式網頁定義單獨的可選策略。
  • 3.8.1 預設策略

    如果沒有在 manifest.json 中定義 content_security_policy,將使用預設內容,預設值為:

    {"content_security_policy": {"extension_pages": "script-src 'self'; object-src 'self';","sandbox": "sandbox allow-scripts allow-forms allow-popups allow-modals; script-src 'self' 'unsafe-inline' 'unsafe-eval'; child-src 'self';"}}

    在這種情況下,擴充套件程式只會從自己的打包資源載入本地指令碼和物件。WebAssembly 將停用,該擴充套件程式將不會執行內嵌 JavaScript,也無法將字串評估為可執行程式碼。如果添加了沙盒頁面,頁面將擁有更寬松的許可權,可以從擴充套件程式外部評估指令碼。

    3.8.2 自訂策略

    Chrome 對擴充套件程式頁面強制執行最低的內容安全政策。這相當於在 manifest.json 中制定以下策略:

    {"content_security_policy": {"extension_pages": "script-src 'self' 'wasm-unsafe-eval'; object-src 'self';"}}

    extension_pages 策略的放寬限制不能超過此最小值。

    3.9 cross_origin_embedder_policy

  • 指定 Cross-Origin-Embedder-Policy HTTP 檔頭的值,該檔頭用於配置在擴充套件程式頁面中嵌入跨源資源。
  • require-corp
  • credentialless
  • unsafe-none
  • { "cross_origin_embedder_policy": { "value": "require-corp" },}

    3.10 cross_origin_opener_policy

  • 指定 Cross-Origin-Opener-Policy HTTP 檔頭的值,可以確保頂級擴充套件程式頁面不會與跨源文件共享瀏覽上下文組。
  • same-origin
  • same-origin-allow-popups
  • restrict-properties
  • unsafe-none
  • { "cross_origin_opener_policy": { "value": "same-origin" },}

    3.11 declarative_net_request

  • 定義 declarativeNetRequest API 的靜態規則,以允許攔截和修改網絡請求。
  • { "name": "My extension", "declarative_net_request" : { "rule_resources" : [{ "id": "ruleset_1", "enabled": true, "path": "rules_1.json" }, { "id": "ruleset_2", "enabled": false, "path": "rules_2.json" }] }, "permissions": [ "declarativeNetRequest", "declarativeNetRequestFeedback", ], "host_permissions": [ "http://www.blogger.com/*", "http://*.google.com/*" ],}

    3.12 default_locale

  • 一個字串,用於定義支持多個語言區域的擴充套件程式的預設語言。例如 en 和 pt_BR
  • 如果擴充套件程式具有 _locales 目錄,則 Manifest.json 必須定義 default_locale。
  • 3.13 devtools_page

  • 定義使用 DevTools API 的頁面。
  • 使用devtools.panels API 建立面板並與之互動,包括將其他擴充套件程式頁面作為面板或資訊看板添加到開發者工具視窗中。
  • 使用 devtools.inspectedWindow API 獲取已檢查視窗的相關資訊,並評估所檢查視窗中的程式碼。
  • 使用 devtools.network API 獲取有關網絡請求的資訊。
  • 使用 devtools.recorder API 擴充套件 Recorder面板。
  • { "name": "Chrome Ext", "version": "1.0", "devtools_page": "devtools.html",}

    3.14 export

  • 允許從擴充套件程式匯出資源。
  • {"version": "1.0","name": "My Shared Module","export": {// Optional list of extension IDs explicitly allowed to// import this Shared Module's resources. If no allowlist// is given, all extensions are allowed to import it."allowlist": ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"]}// Note: no permissions are allowed in Shared Modules}

    3.15 externally_connectable

  • 指定哪些其他頁面和擴充套件程式可以透過 runtime.connect 和 runtime.sendMessage 連線到擴充套件程式。
  • 如果未在擴充套件程式的清單中聲明 externally_connectable 鍵,則所有擴充套件程式都可以連線,但任何網頁都無法連線。
  • 在更新清單以使用 externally_connectable 時,如果未指定 ids: ["*"],其他擴充套件程式將無法連線到擴充套件程式。
  • 內容: ids 允許連線的擴充套件程式的 ID。如果留空或未指定,則任何擴充套件程式或套用都無法連線。通配符 * 將允許所有擴充套件程式和套用連線。 matches 允許連線的網頁的網址格式。如果留空或未指定,則任何網頁都無法連線。格式不能包含通配符網域,也不能包含(有效)頂級網域名稱的子網路域。
  • ✅ 有效網址

    ❌ 網址無效

    *://example.com/

    *://example.com/one/

    http://*.example.org/*

    <all_urls>

    https://example.com/*

    http://*/*

  • accepts_tls_channel_id 允許擴充套件程式使用與其連線的網頁的 TLS 通道 ID。
  • {"name": "My externally connectable extension","externally_connectable": {"ids": ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",],// If this field is not specified, no web pages can connect."matches": ["https://*.google.com/*","*://*.chromium.org/*",],"accepts_tls_channel_id": false},}

    3.16 homepage_url

  • 一個字串,用於指定擴充套件程式首頁的網址。
  • 如果未定義,則首頁預設是擴充套件程式的 Chrome 市集頁面。如果在自己的網站上托管擴充套件程式,此欄位特別有用。
  • {"manifest_version": 3,"name": "chrome extension","version": "0.1.0","description": "My Chrome Extension","homepage_url": "https://guoqiankun.blog.csdn.net/",}


  • 3.17 host_permissions

  • 列出擴充套件程式可以與之互動的網頁(使用網址匹配模式定義)。系統會在安裝時請求這些網站的使用者許可權。
  • permissions 包含已知字串列表中的項。更改可能會觸發警告。
  • optional_permissions 由使用者在執行時(而不是在安裝時)授予。
  • content_scripts.matches 包含一個或多個匹配模式,可允許內容指令碼註入到一個或多個主機中。更改可能會觸發警告
  • host_permissions 包含一個或多個匹配模式,可提供對一個或多個主機的存取許可權。更改可能會觸發警告
  • optional_host_permissions 由使用者在執行時(而不是在安裝時)授予。
  • {"name": "Permissions Extension","permissions": ["activeTab","contextMenus","storage"],"optional_permissions": ["topSites",],"host_permissions": ["https://www.developer.chrome.com/*"],"optional_host_permissions":["https://*/*","http://*/*"],"manifest_version": 3}

    3.18 import

  • 允許將資源匯入擴充套件程式。
  • {"version": "1.0","name": "My Importing Extension","import": [{"id": "cccccccccccccccccccccccccccccccc"},{"id": "dddddddddddddddddddddddddddddddd""minimum_version": "0.5" // optional},]}

    3.19 incognito

  • 定義擴充套件程式在無痕模式下的行為。
  • 支持的值包括 spanning、split 和 not_allowed。
  • {"incognito": "not_allowed"}3.20 key

  • 為各種開發用例指定擴充套件程式的 ID。 將伺服器配置為僅接受來自 Chrome 擴充套件程式來源的請求。 以便其他擴充套件程式或網站向擴充套件程式發送訊息 讓網站可以存取擴充套件程式的 web_accessible_resources。
  • { "manifest_version": 3, "key": "ThisKeyIsChromeKey",}

    3.21 minimum_chrome_version

  • 定義可安裝擴充套件程式的最低 Chrome 版本。
  • 該值必須是現有 Chrome 瀏覽器版本字串的子字串,例如 "107" 或 "107.0.5304.87"。
  • 如果使用者的 Chrome 版本低於最低版本,則會在 Chrome 市集中看到「不相容」警告,並且無法安裝擴充套件程式。如果將此擴充套件程式添加到現有擴充套件程式,則所用 Chrome 版本較低的使用者將不會收到擴充套件程式的自動更新。
  • {"minimum_chrome_version": "120.0.6099.129"}

    3.22 oautp

  • 允許使用 OAuth 2.0 安全 ID。
  • 此鍵的值必須是具有 "client_id" 和 "scopes" 內容的物件。
  • { "name": "OAuth Tutorial FriendBlock", ... "oautp": { "client_id": "yourExtensionOAuthClientIDWillGoHere.apps.googleusercontent.com", "scopes":[""] },}

    3.23 omnibox

  • 允許此擴充套件程式在 Chrome 的網址列中註冊關鍵字。
  • {"omnibox": { "keyword": "newTab" },}

    3.24 optional_host_permissions

  • 為擴充套件程式聲明可選的主機許可權
  • {"optional_host_permissions":["https://*/*","http://*/*"],}

    3.25 optional_permissions

  • 為擴充套件程式聲明可選許可權
  • {"optional_permissions": ["topSites",],}

    3.26 options_page

  • 指定 options.html 檔的路徑,以將擴充套件程式用作選項頁面。
  • {"options_page": "index.html",}

    3.27 options_ui

  • 指定 HTML 檔的路徑,該檔允許使用者在 Chrome 擴充套件程式頁面更改擴充套件程式選項。
  • {"name": "My extension","options_ui": {"page": "options.html","open_in_tab": false},}

    3.28 permissions

  • 允許使用特定的擴充套件程式 API。
  • "permissions": ["storage","activeTab","scripting"]

    3.29 requirements

  • 列出使用擴充套件程式所需的技術。
  • "requirements": {"3D": {"features": ["webgl"]}}

    3.30 sandbox

  • 定義一組擴充套件程式頁面,它們無權存取擴充套件程式 API 或直接存取非沙盒化頁面。
  • 擴充套件程式的沙盒化網頁使用的內容安全政策在 content_security_policy 鍵中指定。
  • 處於沙盒環境中會產生以下兩個影響: 沙盒化頁面將無權存取擴充套件程式 API,也無法直接存取未經過沙盒化的頁面(可透過 postMessage() 與它們進行通訊)。 沙盒化頁面不受擴充套件程式其余部份使用的內容安全政策 (CSP)(有自己的單獨的 CSP 值)的約束。這意味著,例如,它可以使用內嵌指令碼和 eval。
  • {"content_security_policy": {"sandbox": "sandbox allow-scripts; script-src 'self' https://example.com"},"sandbox": {"pages": ["page1.html","directory/page2.html"]},}

    3.31 short_name

  • 一個字串,包含要在字元空間有限時使用的擴充套件程式名稱的縮寫版本。
  • 長度上限為 12 個字元。如果未定義,將顯示 name 鍵的截斷版本。
  • {"short_name": "short name"}

    3.32 side_panel

  • 標識要在 sidePanel 中顯示的 HTML 檔。
  • {"name": "My side panel extension","side_panel": {"default_path": "sidepanel.html"}}

    3.33 storage

  • 聲明托管儲存區域的 JSON 架構。
  • {"name": "My enterprise extension","storage": {"managed_schema": "schema.json"},}

    3.34 tts_engine

  • 將擴充套件程式註冊為文字轉語音引擎。
  • {"name": "My TTS Engine","version": "1.0","permissions": ["ttsEngine"],"tts_engine": {"voices": [{"voice_name": "Alice","lang": "en-US","event_types": ["start", "marker", "end"]},{"voice_name": "Pat","lang": "en-US","event_types": ["end"]}]},"background": {"page": "background.html","persistent": false}}

    3.35 update_url

  • 一個字串,其中包含擴充套件程式的更新頁面的網址。
  • 如果是在 Chrome 市集之外托管擴充套件程式,需要添加此欄位。
  • { "name": "My extension", "update_url": "https://myhost.com/mytestextension/updates.xml",}

    3.36 version_name

  • 一個描述擴充套件程式版本的字串。例如 1.0 beta 和 build rc2。
  • 如果未指定,則改為在擴充套件程式管理頁面上顯示 version 值。
  • {"version_name": "1.0 beta"}

    3.37 web_accessible_resources

  • 定義擴充套件程式中可供網頁或其他擴充套件程式存取的檔。
  • {"web_accessible_resources": [{"resources": [ "test1.png", "test2.png" ],"matches": [ "https://web-accessible-resources-1.glitch.me/*" ]}, {"resources": [ "test3.png", "test4.png" ],"matches": [ "https://web-accessible-resources-2.glitch.me/*" ],"use_dynamic_url": true}],}

    4. ChromeOS 可選的 Key

    4.1 file_browser_handlers

  • 提供對 fileBrowserHandler API 的存取許可權,該 API 允許擴充套件程式存取 ChromeOS 檔瀏覽器。
  • { "name": "My extension", "file_browser_handlers": [ { "id": "upload", "default_title": "Save to Gallery", // What the button will display "file_filters": [ "filesystem:*.jpg", // To match all files, use "filesystem:*.*" "filesystem:*.jpeg", "filesystem:*.png" ] } ], "permissions" : [ "fileBrowserHandler" ],}

    4.2 file_handlers

  • 指定 ChromeOS 擴充套件程式要處理的檔類別。
  • "file_handlers": [{"action": "/open_text.html","name": "Plain text","accept": {"text/plain": [".txt"]}"launch_type": "single-client"}]

    4.3 file_system_provider_capabilities

  • 允許存取 fileSystemProvider API,以便擴充套件程式建立 ChromeOS 可以使用的檔案系統。
  • { "name": "My extension", "permissions": [ "fileSystemProvider" ], "file_system_provider_capabilities": { "configurable": true, "watchable": false, "multiple_mounts": true, "source": "network" },}

    4.4 input_components

  • 允許使用 Input Method Editor API。
  • {"input_components": [{"name": "ToUpperIME","id": "ToUpperIME","language": "en","layouts": ["us::eng"]}]}


    原文連結:https://juejin.cn/post/7324213873783717923