[Chrome extension] 辨別 extension 現在是未封裝或已封裝狀態

[Chrome extension] 辨別 extension 現在是未封裝或已封裝狀態

在寫 Chrome extension 的時候,

有時候會需要寫出一些除錯訊息,以幫助我們能在開發時尋找問題。

但是可能又不希望這些訊息會被一般的使用者看到,

那麼該怎麼辦呢?

 

一種簡單的方法是設定一個變數,在開發的時候把它設成 0,

在封裝上傳至 Chrome web store 之前把它改成 1,

這樣就可以依據這個變數的值,來決定要不要顯示除錯相關的訊息。

這個方法的缺點是,必須記得去改這個變數…這對懶人如我來說是相當麻煩的 =_=…

 

很幸運的在 stackoverflow 找到了更好的答案

這個方法的原理是每個 Chrome extension 都會有自己的一個 extension id,

當一個 extension 上傳至 Chrome web store 之後(已封裝 packed 狀態),

Google 就會給它一個固定的 extension id,

即使之後有更新,extension id 也是不會改變~

舉例來說,我寫的 Extract Image URLs for Google+(TM) Gallery

它的固定 extension id 就是 pgamjbgjbbebkhlddcnhipkgfngffdfc~

extensionid1

 

相反的,當開發者用 Chrome 載入一個未封裝的 extension 時 (unpacked),

Chrome 會隨機給它一個 extension id…

例如,當我載入同一個但是未封裝的 extension 時,

這次拿到的 extension id 是 hfmlchkpkngacpofgfhpcbelgcmgpkll~

extensionid2

 

因此,只要去比較現在的 extension id,

是不是和已經上傳至  Chrome web store 的那個 extension id 相同就可以了~

當然,這個方法只能在你的 extension 已經至少上傳過一次之後才能使用了~

 

應用以上所說,我在 extension 的程式碼中加了以下這一段:

var g_bEnableDebugMode      = false;
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) 的說明~

   

(本頁面已被瀏覽過 202 次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料