一個插件的大致目錄結構如下:
其中manifest文件最為重要,它定義/指明插件應用的相關信息(權限、版本、功能說明等),點此查看Manifest的詳情>>

這里有一篇chrome官方提供的插件編寫的例子<Getting Started:Building a Chrome Extension>
popup.html的說明,就是瀏覽器導航上的插件按鈕點擊后的彈出頁面
background.htm是一個始終運行於瀏覽器后台的頁面,瀏覽器關閉時它才被關閉,可以作為一個監聽者
地址欄訪問:chrome://extensions/ 載入編寫插件的目錄
點擊后,彈出調試器
content_scripts 可以直接操作網頁,相當於指定域名下頁面,外鏈了一個JS文件。
注:插件的icon尺寸大小 width * height = 128px * 128px,可以通過http://www.easyicon.net/進行搜索
下面說一下幾個容易混淆的地方:
一、插件的作用域
插件環境:popup.html、background_page
頁面環境:content_scripts
所有content_scripts無法直接獲取popup.html頁中通過localStorage存儲的數據,需要借助background.htm進行中轉。
popup.html可以使用ajax進行跨域請求數據,但受manifest中的permissions選項的限制(需要指定相應的域名),content_scripts跟頁面一樣,不能直接跨域請求數據
二、腳本的載入
所有的頁面(html/htm)不能直接嵌入內聯JavaScript函數,都必須使用script標簽引入,如果使用內聯腳本,控制台會報錯
三、生命周期
popup.html 可以認為它是一個網頁,由導航上的插件按鈕點擊時載入(里面的腳本開始執行),關閉彈出層時也就關閉了這個網頁(里面的代碼亦不會再執行)
background.htm 在插件啟用后瀏覽器進程存在的情況下開始,瀏覽器關閉時或插件卸載時結束
content_scripts 與瀏覽的頁面生命周期同步
四、消息傳遞
一般來講,是在popup.html中操作后,需要同步至各content_scripts中,這就存在幾個問題:
1、popup.html被激活時,如何廣播消息至各tab頁;
2、當激活指定的tab頁時,content_scripts如何獲取popup.html中存儲的相關數據;
當popup.html關閉時,content_scripts需要通過background.htm赤獲取數據,當popup.html激活並獲得相關數據后,需要廣播消息出去。
1、content_scripts 獲取數據
調用chrome.extension.sendRequest方法,發送相應的數據出去。background.htm的處理腳本監聽到消息后,調用sendResponse方法返回數據
2、popup.html 廣播消息至各頁面
popup.html的處理腳本,在得到數據后,調用chrome.tabs.sendRequest方法廣播。但是chrome.tabs.sendRequest方法需要指定tab選項卡的id (tab頁的一個標識ID)
在我嘗試過一些方法,如:getCurrent、getAllInWindow等方法后,感覺達不到效果,如果當前並不是選中指定的頁面呢?后來嘗試使用query方法,被我發現可以遍歷獲得所有滿足條件的tab頁
通過URL這個屬性就可以進行過濾,然后拿到tabId,再調用sendRequest方法,content_scripts 再監聽消息獲得數據就可以對頁面進行任意修改了。
這樣在popup.html頁面操作后,所有滿足條件的頁面均能實現自動更新(包括刷新頁面操作)
popup.html相應的腳本代碼處理方法(查詢並發送消息)
content_scripts 對應的腳本處理函數(接受消息)
參考資料:
