常見問題

如果在這裡找不到問題的解答,請嘗試 Chrome 線上應用程式商店常見問題Stack Overflow 上的 [google-chrome-extension] 標記chromium-extensions 群組,或 商店說明

一般

什麼是 Google Chrome 擴充功能?

Google Chrome 擴充功能是在 Chrome 瀏覽器中執行的應用程式,可提供額外功能、與第三方網站或服務整合,以及自訂瀏覽體驗。

如何設定 Chrome 以開發擴充功能?

只要使用支援擴充功能的 Chrome 版本,您就能擁有開始自行編寫擴充功能所需的一切功能。首先,請開啟開發人員模式。

按一下 Chrome 選單圖示,然後選取「工具」選單中的「擴充功能」。確認已勾選右上角的「開發人員模式」核取方塊。現在您可以重新載入擴充功能、載入未封裝的檔案目錄,就如同封裝擴充功能一樣。如需完整教學課程內容,請參閱「入門指南」。

哪些技術可用來編寫 Chrome 擴充功能?

擴充功能所使用的標準網路技術,與開發人員建立網站的相同。HTML 可做為內容標記語言使用,CSS 則用於樣式設定,而 JavaScript 則用於指令碼。由於 Chrome 支援 HTML5 和 CSS3,因此開發人員可以在擴充功能中使用最新的開放網路技術,例如畫布和 CSS 動畫。擴充功能也能存取幾種 JavaScript API,協助執行 JSON 編碼等功能,以及與瀏覽器互動。

瀏覽器每次載入瀏覽器時,是否都會從網路擷取擴充功能?

擴充功能會在安裝時由 Chrome 瀏覽器下載,接著在本機磁碟上執行,以便加快效能。但是,如果在線上推送新版擴充功能,便會自動在背景下載至所有已安裝擴充功能的使用者。擴充功能也可能隨時發出遠端內容要求,以便與網路服務互動,或從網路上提取新內容。

如何決定要將哪個 Chrome 版本部署至哪個版本?

如要判斷每個不同平台目前可用的 Chrome 版本,請前往 omahaproxy.appspot.com。在該網站上,您可能會看到類似以下格式的資料:

cf,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
cf,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
cf,stable,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
linux,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
linux,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
linux,stable,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
mac,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
mac,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
mac,stable,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
win,canary,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
win,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
win,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
win,stable,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
cros,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
cros,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####

每一行分別代表不同平台和管道組合的相關資訊。列出的平台為 cf (Google Chrome 內嵌框架)、linuxmacwincros (Google ChromeOS)。列出的管道為 canarydevbetastable。管道之後的兩部分數字代表目前和先前部署至該平台版本組合的 Chrome 版本。其餘資訊是關於版本首次推送時間的中繼資料,以及與每個版本相關聯的修訂版本編號。

功能

擴充功能可以發出跨網域的 Ajax 要求嗎?

會。擴充功能可以發出跨網域要求。詳情請參閱此頁面

擴充功能可以使用第三方網路服務嗎?

會。擴充功能可以提出跨網域 Ajax 要求,因此可以直接呼叫遠端 API。以 JSON 格式提供資料的 API 特別容易使用。

擴充功能可以編碼/解碼 JSON 資料嗎?

可以,因為 V8 (Chrome 的 JavaScript 引擎) 支援 JSON.stringify 和 JSON.parse 原生支援,因此您可以按照這裡的說明,在擴充功能中使用這些函式,不需要在程式碼中加入任何其他 JSON 程式庫。

擴充功能可以將資料儲存在本機嗎?

可以,擴充功能可以使用 localStorage 永久儲存字串資料。您可以使用 Chrome 內建的 JSON 函式,將複雜的資料結構儲存在 localStorage 中,對於需要對儲存資料執行 SQL 查詢的擴充功能,Chrome 會實作用戶端 SQL 資料庫,也可以使用這個資料庫。

擴充功能可使用 OAuth 嗎?

是,有些擴充功能使用 OAuth 存取遠端資料 API。多數開發人員都發現,為了簡化 OAuth 要求簽署程序,使用 JavaScript OAuth 程式庫是很方便的。

擴充功能可以在轉譯的網頁之外建立使用者介面嗎?

可以,您的擴充功能可能會在 Chrome 瀏覽器使用者介面中新增按鈕。詳情請參閱瀏覽器動作頁面動作

擴充功能也可能會建立彈出式視窗通知,但這類通知位於瀏覽器視窗外。詳情請參閱桌面通知說明文件。

擴充功能可以監聽 Chrome 分頁和導覽按鈕的點擊嗎?

否。擴充功能只能監聽 API 說明文件中所述的事件。

兩種擴充功能可以彼此通訊嗎?

會,擴充功能可能會傳送訊息至其他擴充功能。詳情請參閱訊息傳遞說明文件

擴充功能可以使用 Google Analytics (分析) 嗎?

是的,擴充功能就像網站一樣,因此可以使用 Google Analytics (分析) 追蹤使用情況。不過,您必須修改追蹤程式碼來提取 HTTPS 版本的 Google Analytics (分析) 程式庫。如需更多操作說明,請參閱這個教學課程

擴充功能可以修改 chrome:// 網址嗎?

否。擴充功能 API 的設計旨在盡可能減少瀏覽器推送新版瀏覽器時可能發生的回溯相容性問題。如果允許 chrome:// 網址的內容指令碼,開發人員會開始依賴這些網頁的 DOM、CSS 和 JavaScript 來保持不變。不過,最佳做法是,這些網頁無法因為正在更新中而快速更新。 在最糟的情況下,這可能表示其中一個網頁更新可能會造成擴充功能中斷,導致瀏覽器的某些部分停止運作。

之所以可以完全替換這些網址上代管的內容,是因為其可強制擴充功能開發人員實作需要的所有功能,不必仰賴瀏覽器的內部實作項目來保持不變。

擴充功能可以在使用者未操作的情況下,開啟瀏覽器/網頁動作彈出式視窗嗎?

不可以。只有當使用者點選對應的網頁或瀏覽器動作時,系統才會開啟彈出式視窗。擴充功能無法透過程式輔助方式開啟彈出式視窗。

當使用者點選離開擴充功能時,擴充功能是否可以保持開啟?

不會。當使用者聚焦於彈出式視窗以外的部分瀏覽器時,彈出式視窗會自動關閉。使用者一旦離開,就無法讓彈出式視窗保持開啟。

安裝/解除安裝擴充功能時,可以收到通知嗎?

您可以監聽 runtime.onInstalled 事件,以便接收安裝或更新擴充功能的通知,或是 Chrome 本身更新的時間。使用者解除安裝擴充功能時沒有對應的事件。

開發

如何為我的擴充功能建構使用者介面?

擴充功能使用 HTML 和 CSS 定義使用者介面,因此您可以使用標準表單控制項建構 UI,或透過 CSS 設定介面樣式,就像使用網頁一樣。此外,擴充功能可以在 Chrome 本身中加入部分有限的 UI 元素

本機儲存空間中可以儲存多少資料?

擴充功能最多可在 localStorage 儲存 5MB 的資料,

如何為應用程式建立選項選單?

您可以建立選項頁面,讓使用者設定擴充功能的選項,這個頁面是簡單的 HTML 網頁,會在使用者點擊擴充功能的「選項」按鈕時載入。這個頁面可以讀取設定並寫入 localStorage,甚至可將選項傳送至網路伺服器,以便在不同瀏覽器間保留設定。

擴充功能開發人員可使用哪些偵錯工具?

Chrome 內建的開發人員工具可用於對擴充功能和網頁進行偵錯。詳情請參閱這個偵錯擴充功能教學課程

為什麼頂層網域 (TLD) 不支援萬用字元比對?

您無法使用 http://google.*/* 等萬用字元比對模式來比對 TLD (例如 http://google.eshttp://google.fr),因為這類比對實際上只會比對所需的網域。

http://google.*/* 範例中,Google 網域會相符,但 http://google.someotherdomain.com。此外,許多網站並沒有本身網域中的所有 TLD。舉例來說,假設您想要使用 http://example.*/* 比對 http://example.comhttp://example.es,但 http://example.net 是惡意網站,如果您的擴充功能含有錯誤,惡意網站可能會攻擊您的擴充功能,藉此取得擴充功能的額外權限。

建議你明確列舉要執行擴充功能的 TLD。

為什麼我安裝/解除安裝擴充功能時,管理 API 沒有觸發事件?

management API 主要是用來建立新的分頁擴充功能。該 API 不是為目前的擴充功能觸發安裝/解除安裝事件。

如何判斷擴充功能是否為初次執行?

您可以監聽 runtime.onInstalled 事件。詳情請參閱這篇常見問題文章

功能與錯誤

我發現錯誤了!我該如何確保問題已解決?

開發擴充功能時,可能會發現與擴充功能說明文件不相符的行為,而且可能是 Chrome 發生錯誤所導致。建議你確認是否已提交適當的問題報告,且 Chromium 團隊擁有足夠的資訊可重現該行為。

請按照下列步驟操作,確保下列事項:

  1. 提出最小的測試擴充功能,以呈現想要回報的問題。這個擴充功能應盡可能少用程式碼來展示錯誤,一般來說,這應該不會超過 100 行程式碼。開發人員往往發現無法以這種方式重現問題,這很適合用來表示該錯誤位於自己的程式碼中。
  2. http://crbug.com 搜尋 Issue Tracker,查看是否有人回報過類似問題。多數與擴充功能相關的問題,都會列在 component=Platform>Extensions 底下,因此,如要找出與 chrome.tabs.executeScript 函式相關的擴充功能錯誤 (例如),搜尋「component=Platform>Extensions Type=Bug chrome.tabs.executeScript」,即可取得結果清單
  3. 如果您找到了與問題相關的錯誤,請按一下星號圖示,以便在錯誤收到更新時收到通知。請勿回應錯誤來說明「我也是」或詢問「何時會修正?」;這類更新可能會導致系統傳送數百封電子郵件。除非您有可能有幫助的資訊 (例如更好的測試案例或建議的修正方式),否則請勿新增註解。
  4. 如果找不到適合加上星號的錯誤,請前往 http://crbug.com/new 提交新的問題報告。 填寫這份表單時,請盡可能明確:選擇描述性的標題、說明重現錯誤的步驟,以及說明預期和實際行為。請將測試範例附加至報表,並視需要新增螢幕截圖。您的回報內容越容易讓他人重現您的問題,就越有機會立即修正錯誤。
  5. 等待錯誤更新。大多數新錯誤都會在一週內分類,但有時可能會需要更多時間完成更新。請勿回覆錯誤來詢問問題何時可以修正。如果您的錯誤在兩週後尚未修改,請在討論群組中張貼留言,並附上返回您錯誤的連結。
  6. 如果您原本是在討論群組中回報錯誤,並被系統導向此常見問題項目,請在原始討論串中回覆,並提供您加上星號或回報的錯誤連結。方便遇到相同問題的其他使用者更快找出正確的錯誤。

我有功能要求!該如何檢舉?

如果您找出可用來改善擴充功能開發體驗的功能 (尤其是與實驗性 API 相關的功能),請務必在 Issue Tracker 中提出適當的要求。

請按照下列步驟操作,確保下列事項:

  1. http://crbug.com 搜尋 Issue Tracker,查看是否有人要求取得類似的功能。多數與擴充功能相關的要求都會提交到 component=Platform>Extensions 底下,因此,請搜尋「component=Platform>Extensions Type=Feature shortcuts」以產生此結果清單
  2. 如果您找到符合要求的支援單,請按一下星號圖示,以便在錯誤收到更新時收到通知。請不要對錯誤回應「我也是」或詢問「何時會實作?」;這類更新可能會導致系統傳送數百封電子郵件。
  3. 如果你找不到適合加上星號的票證,請前往 http://crbug.com/new 提交新要求。填寫這份表單時,請盡可能詳細說明:選擇描述性的標題,並確切說明所需的功能以及預計使用方式。
  4. 等待票券更新。大部分的新要求會在一週內分類,但有時可能會需要更多時間完成更新。請勿回覆支援單,詢問何時會新增該功能。如果您的支援單在兩週後未曾修改,請在討論群組中發布訊息,並附上連回要求的連結。
  5. 如果您原本是在討論群組中檢舉您的要求,且系統收到了這則常見問題項目給您的回覆,請在原始會話串回覆中附上您加上星號或開啟的支援單的連結。如此一來,相同要求的其他其他使用者就能更輕鬆地找到正確的支援單。