Re: [-GC-][-Fx-] 撰寫跨瀏覽器套件的注意事項

看板Browsers (瀏覽器)作者 (道可道非常道)時間1天前 (2025/06/08 23:07), 3小時前編輯推噓2(200)
留言2則, 2人參與, 6小時前最新討論串2/2 (看更多)
因應谷歌強推 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/GCffk3. 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/8UsNjhttps://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
文章代碼(AID): #1eHQTBJk (Browsers)
文章代碼(AID): #1eHQTBJk (Browsers)