Re: [-GC-][-Fx-] 撰寫跨瀏覽器套件的注意事項
因應谷歌強推 Manifest V3,更新一些資訊。
1. 支援瀏覽器版本
1.1. 若要共用 manifest.json,一般要 Firefox / Chromium >= 121。
因為目前 Firefox MV3 只支援 background page,
Chromium MV3 只支援 background service worker,
二者在 manifest.json 的 background 有不同的 property 設定值。
在 121 版以後,可以在 manifest.json 填入二種設定值,
瀏覽器會自動忽略不支援的值。
然而在 121 版以前的 Firefox/Chromium,
若 manifest.json 的 background 含有不支援的設定值,就無法載入套件,
因此無法共用 manifest.json,必須為不同瀏覽器準備不同的 manifest.json,
除非你的套件完全不使用 background script。
不過這點不算是剛需,因為很多開發者本來就會模組化撰寫並使用打包腳本。
詳見:https://t.ly/Hju1V
1.2. 由於根憑證過期問題,一般只有 Firefox >= 115 可以安裝套件。
若要在舊版的 Firefox 安裝套件,主要有二種方法:
(1) 安裝 Fx ESR 或 Developer 版本,並關閉簽署檢查。
(2) 更改 Firefox 的二進位碼
詳見:#1duAWaDJ (Browsers)
1.3. Manifest V3 支援門檻:Firefox >= 109, Chromium >= 88
1.4. Firefox for Android 一般支援門檻:Firefox >= 113
Firefox for Android 技術上來說,
113 <= Fx 開始支援從 Firefox 附加元件站 (AMO) 安裝 Android 套件;
79 <= Fx < 113 必須使用 Nightly 且用比較複雜的開發人員方式安裝;
68.2 <= Fx < 79 可以安裝桌機版的 Firefox 套件(前提是程式/API可以跑)。
但那些都是浮雲,由於 1.2. 根憑證問題,
目前 Firefox for Android < 115 其實都無法安裝套件,
除非有高人開發出讓 Firefox for Android 繞過安裝及簽署限制的方法。
(1.2. 相關方法只適用桌機版)
詳見:#1bewwsWQ (Browsers)
1.5. 作業系統支援:
Windows XP: Firefox <= 52, Chromium <= 49
Windows 7/8: Firefox <= 115, Chromium <= 109
Windows XP 太老,目前應該幾乎沒人在考慮了,要用也是為了使用舊版套件。
Windows 7/8 官方已停止支援,不過目前大約還有 2.5% 的桌機市佔率。
綜上所述,
一般而言建議寫成 MV3 並支援 Firefox >= 115 / Chromium >= 109;
若要懶一點直接共用 manifest.json,需求會上升到 Firefox/Chromium >= 121;
若想多照顧一些使用者,可以把門檻降低到 Firefox >= 109 / Chromium >= 88,
但實際上開發者得花額外心力處理更多API相容問題,
使用者也要處理簽署問題,
值不值得請自行三思。
至於寫成 MV2 套件,一般而言不太推薦,
畢竟 Chromium 通常會強制更新瀏覽器,且現在已拚命阻止使用者安裝及使用 MV2,
不久即將停止支援,到時候大家都不能用;
Firefox 則因為根憑證問題導致低於 115 版本安裝套件麻煩又不安全,
效益不是很大。
當然如果你的套件是 MV2 就存在很久的套件,
並且 MV3 確實會影響安裝、使用或基本功能,
那就另當別論。
2. chrome vs browser API
在 Manifest V2 時,
開發跨平台套件通常要嘛 chrome.* 用到底,
要嘛用 browser.* 並且在 Chromium 掛上 browser-polyfill.js。
在 Manifest V3,
Chromium 大部分 API 已支援回傳 promise,
因此即使想用 promise 也可以選擇 chrome.* 用到底,
或者用 browser.* 並且在 Chromium 加上 browser = chrome 的超輕量 polyfill。
然而 Chromium 的 onMessage 仍然不支援回傳 Promise(以及在發訊端直接 error),
如有此需求,還是可以考慮掛上 browser-polyfill.js。
但相對地,browser-polyfill.js 更新有點緩慢,
有些 Chromium 較晚加入的 API,直接透過此 polyfill 呼叫會出錯,
需要反映給官方更新,
或自行在原始碼的 const apiMetadata 那邊補上未定義的 API。
(詳見:https://t.ly/GCffk)
3. service worker vs background page
Chromium MV3 強迫把 background page 改成 service worker,
一個不小的衝擊是無法使用 DOM API,例如 document, DOMParser, XMLHttpRequest;
以及 service worker 會定期休眠及重啟導致許多東西需要重載。
官方提供的解決方案是使用 offscreen API (Chromium >= 109),
這個 API 可以建立一個永久性的隱藏頁面,供上述需求使用,
實務上要寫一些 messaging 和 background service worker 溝通。
(詳見:https://t.ly/5vIk7)
Firefox MV3 目前還不支援此 API,
雖然 Firefox MV3 目前還在使用 background page,不會因此無法使用 DOM API,
但因為根本沒有相關 API,如果要跨瀏覽器,
得寫些包裹二種使用情境的判斷式或高階 API,會有點麻煩。
另一個麻煩是 Firefox MV3 的 background page 也強迫改成 non-persistent,
若要避免定期休眠重啟導致資料重載等問題仍得另尋解方。
4. 使用者自訂腳本
之前傳說 MV3 會導致猴子死光,這點目前官方有善意回應。
新的 userScripts API (Chromium >= 120, Firefox >= 136)
可以允許使用者寫入的任意腳本以類似 content scripts 的方式執行,
但無法呼叫 messaging 以外的 extension API。
此外 Chromium 必須要使用者開啟開發人員模式才能使用此 API。
目前所見 Tampermonkey MV3 版本已確定可運作。
詳見:https://t.ly/oJ3tp
5. webRequestBlocking
這個就是 Google 鐵了心要搞死各種內容阻擋器(以提升效能/安全性的名義),
目前仍是比較棘手的問題。
其實 MV3 也不是完全無法使用相關功能,但必須改登錄檔強制安裝套件,
需要提醒使用者做相關設定,且需要相關系統權限。
詳見:https://t.ly/QdS2I
6. sidebarAction vs sidePanel
這算是 MV3 極少數的福利。
Chromium >= 114 為 MV3 套件加入新的 sidePanel API,終於有原生支援的側欄了。
但 Chromium 側欄目前看起來仍不如 Firefox,
其一是只能放在右側,不像 Firefox 可以切換顯示在左或右側;
而且四角設計成圓弧狀,我覺得有點醜,且可能影響某些套件的操作。
再來是目前還有一些 bug,例如無法在某些使用者操作下開啟。
詳見:https://t.ly/8UsNj、https://t.ly/fhDOD
7. 手機瀏覽器支援
手機瀏覽器的擴充套件支援目前滿亂的,
首先 iOS 因為特別政策,只支援 Safari 核心,
iOS 版的 Chromium / Firefox 都是無法安裝套件。
Android 上的 Chromium / Edge 也是不支援套件,
以往主要是 Kiwi browser 這個分支有支援套件,但作者已退坑不更新了。
Microsoft Canary 據說有合併 Kiwi 相關程式碼,
也有支援擴充套件,但要用很麻煩的方法開啟開發人員模式安裝。
Firefox for Android 整體來說對套件的支援算相對好一點,
不過目前仍有個值得吐槽的點是打死不支援 downloads API,
而且是執行時出錯,無法藉由偵測 browser.downloads 做 feature detection,
給開發者找麻煩……。
話雖如此,在 Android 上的 downloads 實做似乎一直有些技術上的難題,
即使是之前的 Kiwi browser 有支援,
其實也有一些功能上的問題及相容性問題要解決。
總之手機瀏覽器支援有很多坑要踩,請感恩仍致力於此的程序猿們……。
--
《終結內容農場》瀏覽器套件 https://bit.ly/CFTINFO
適用 Chrome 系及 Firefox 系桌面瀏覽器
適用 Android 手機瀏覽器 (Kiwi Browser, Firefox for Android 等)
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.115.29.236 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Browsers/M.1749395275.A.4EE.html
※ 編輯: danny0838 (59.115.29.236 臺灣), 06/08/2025 23:22:45
推
06/09 17:52,
6小時前
, 1F
06/09 17:52, 1F
推
06/09 18:23,
6小時前
, 2F
06/09 18:23, 2F
※ 編輯: danny0838 (59.115.61.71 臺灣), 06/09/2025 21:17:39
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
Browsers 近期熱門文章
PTT數位生活區 即時熱門文章