[英]Using chrome.tabs vs browser.tabs for browser compatibility
我正在將我的 Chrome 擴展程序移植到 Firefox。
根據 MDN,chrome 應該支持一個browser.tabs API。
但是browser
不是 Chrome 穩定版中的對象。 同時chrome.tabs
在 Firefox 中工作得很好。
閱讀 MDN 文檔時,用chrome
替換browser
是否安全? 文檔寫browser
的原因是什么? 有計划的改變嗎?
注意:最近幾天,許多 MDN JavaScript API 頁面已從使用chrome.*
更改為使用browser.*
並描述了browser.*
接口提供的承諾。 這些更改使頁面根本沒有提及使用 API 作為chrome.*
。 這些更改是由項目中的同一個人進行的,我曾與他討論過從browser.*
到chrome.*
的更改。 我還不知道發生了什么。 我已經給他發了電子郵件,詢問這些變化的原因。 截至本次編輯,2016-11-02,現在期待他的回應還為時過早。
我不參與 API 的工作。 但是,我已經並且將要對 API 文檔進行一些更改,特別是關於 WebExtensions chrome.*
與browser.*
(截至 2016 年 9 月 22 日,所有頁面都已更改為顯示chrome.*
)。 我參與其中是因為我也發現大多數 WebExtensions API 頁面顯示browser.*
令人困惑。 我想知道chrome.*
和browser.*
之間有什么區別。 一旦我發現,我想讓其他人不那么困惑。
browser.*
API 返回一個 promise : browser.*
對象實現了一個API版本, 如果您在調用 API 時省略提供回調函數,該版本將返回一個承諾。 目的是使chrome.*
和browser.*
的實際功能相同。 如果您向browser.*
API 提供回調函數,則其功能與chrome.*
API 相同。
閱讀 MDN 文檔時,用
chrome
替換browser
是否安全?
是的,除非文檔專門討論承諾。 兩者的唯一區別是,如果調用 API 時未提供回調函數,則browser.*
方法將返回一個 promise。
文檔寫
browser
的原因是什么?
我不確定為什么文檔最初是用browser.*
編寫的browser.*
如此突出。 我認為要么是在生成頁面時做出的配置選擇,要么是chrome.*
和browser.*
之間差異的細節在實現 WebExtensions API 的早期發生了變化。
chrome.*
沒有回調不能返回承諾是否有技術原因?
到目前為止,我想出的唯一原因是使用chrome.*
返回承諾將使在 API 中執行參數檢查時無法檢查強制回調函數的存在。 使用browser.*
命名空間,API 可以假設調用者正在使用返回的承諾。 因此,當調用 API 時未提供強制回調函數時,使用browser.*
可以返回承諾而不是生成錯誤。 然而,這個原因是我的推測。
我同意 API 文檔主要在語法部分和每個 API 頁面的其他地方顯示browser.*
令人困惑(例如在示例中)。 在過去的 3 周里,我一直在與主要負責 WebExtensions 文檔的人討論在整個 API 文檔中更改這一點。 他同意應該改變它。
有計划進行更改。 文檔將至少分兩個階段進行更改。 首先是瀏覽所有 WebExtensions API 頁面並將語法部分更改為chrome.*
。 語法部分末尾的注釋會說“API 也可作為browser.*
在返回 promise的版本中使用。” 此外,整個頁面中所有對browser.*
都將更改為chrome.*
除了那些專門顯示 API 被用作返回承諾的部分。
當前的期望是該頁面看起來與現在的alarms.clear()非常相似。 我已經更改了該頁面以顯示我建議的更改內容,包括負責 WebExtensions 文檔的人員的建議。 alarms.clear()
語法部分目前看起來像:
最初(3 周前, alarms.clear()
8 月 25 日),我將 API 頁面從alarms.clear()
更改為browserAction.enable()
,主要更改是將內容從說browser.*
到chrome.*
當我的由於其自動垃圾郵件過濾,因此無法訪問對 MDN 進行更改。 這導致了對更改將采用的格式的討論。 我暫停了更改,希望一旦選擇了語法框的中間格式,就可以一次性完成初始更改。 由於現實生活,雙方的討論時間比我預期的要長。
看起來關於將使用的確切格式的討論將擴大到包括dev-mdc 郵件列表,因為語法框的“正確”格式在Mozilla 文檔中不清楚如何編寫 API 方法頁面.
但是,我相信我可以繼續更改顯示chrome.*
而不是browser.*
。 這樣做可能會導致必須再次編輯頁面才能將格式設置為最終決定為官方格式的任何內容。 在最終確定語法塊格式之前將browser.*
更改為chrome.*
可能會導致更多的整體工作,但在討論格式更改的最終版本時會減少混淆。 雖然我必須逐頁進行這些更改(有一個用於進行批量更改的 API,但我沒有訪問權限),但我已經實現了一個腳本,可以進行大部分所需的更改。 因此,這些初始的不應花費太長時間。
更新:
我已將所有 WebExtensions JavaScript API 頁面更改為顯示chrome.*
而不是browser.*
。 您可能需要在每個頁面上按Ctrl - F5才能查看更改。
進一步的變化,更清楚地提供關於browser.*
文檔browser.*
:
在對語法塊格式進行全面更改后,希望稍后進行其他更改,以便在每個 API 頁面的基礎上提供更多示例,說明使用chrome.*
和browser.*
之間的差異browser.*
. 這幾乎可以肯定是一個長期項目。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.