[Chrome extension] 辨別 extension 現在是未封裝或已封裝狀態
在寫 Chrome extension 的時候,
有時候會需要寫出一些除錯訊息,以幫助我們能在開發時尋找問題。
但是可能又不希望這些訊息會被一般的使用者看到,
那麼該怎麼辦呢?
一種簡單的方法是設定一個變數,在開發的時候把它設成 0,
在封裝上傳至 Chrome web store 之前把它改成 1,
這樣就可以依據這個變數的值,來決定要不要顯示除錯相關的訊息。
這個方法的缺點是,必須記得去改這個變數…這對懶人如我來說是相當麻煩的 =_=…
這個方法的原理是每個 Chrome extension 都會有自己的一個 extension id,
當一個 extension 上傳至 Chrome web store 之後(已封裝 packed 狀態),
Google 就會給它一個固定的 extension id,
即使之後有更新,extension id 也是不會改變~
舉例來說,我寫的 Extract Image URLs for Google+(TM) Gallery,
它的固定 extension id 就是 pgamjbgjbbebkhlddcnhipkgfngffdfc~
相反的,當開發者用 Chrome 載入一個未封裝的 extension 時 (unpacked),
Chrome 會隨機給它一個 extension id…
例如,當我載入同一個但是未封裝的 extension 時,
這次拿到的 extension id 是 hfmlchkpkngacpofgfhpcbelgcmgpkll~
因此,只要去比較現在的 extension id,
是不是和已經上傳至 Chrome web store 的那個 extension id 相同就可以了~
當然,這個方法只能在你的 extension 已經至少上傳過一次之後才能使用了~
應用以上所說,我在 extension 的程式碼中加了以下這一段:
var g_sExtensionId = chrome.i18n.getMessage(‘@@extension_id’);
// If this is not the production extension id, show debug
if (g_sExtensionId != “pgamjbgjbbebkhlddcnhipkgfngffdfc”)
{
g_bEnableDebugMode = true;
}
拿 extension id 的方式是用 chrome.i18n.getMessage(‘@@extension_id’),
可以參考 Google Chrome Extensions – Internationalization (i18n) 的說明~