1) 不可視的background頁面javascript
Google Chrome擴展每每包含一個不可見的background頁面,Google Chrome擴展的主要業務邏輯都位於此。有兩種類型的background 頁面,一種是persistent background pages,另外一種是event pages。Persistent background pages持續運行,隨時可訪問。而Event pages是事件驅動運行的,只有在事件發生的時候才能夠訪問。java
Persistent background pages默認加載入內存,持續運行在後臺。在manifest.json文中註冊Persistent background page以下:chrome
{json
"background": {跨域
"scripts": [myBackgroundPage.js],數組
"persistent": true瀏覽器
]服務器
}併發
Event pages默認是不加載的,只在事件發生時加載並運行。觸發加載Event pages的場景以下:異步
· Google Chrome擴展第一次被安裝或升級到新版本
· 發生了Event pages監聽的事件
· content script或其餘Google Chrome擴展發出了一個message
· Google Chrome擴展中的其餘頁面調用了chrome.runtime.getBackgroundPage()方法
Google Chrome擴展經過chrome.runtime.onInstalled.addListener(onInit)要求監聽onInstalled事件,Chrome瀏覽器跟蹤當前發生的全部事件。一旦被監聽的事件發生,Chrome瀏覽器就會加載Event pages。
若是Google Chrome擴展經過removeListener取消了對某事件的監聽,則該事件發生時Chrome瀏覽器也不會加載Event pages。
當事件再也不被監聽器引用後卸載以釋放內存併發出chrome.runtime.onSuspend事件。
在manifest.json文中註冊Event page以下:
{
"background": {
"scripts": [myEventPage.js],
"persistent": false
]
}
2) 可視頁面
Google Chrome擴展能夠徹底運行在後臺,也能夠爲用戶提供可視界面。Google Chrome擴展最經常使用的可視界面爲以下兩種形式(二者是互斥的):
· browser actions,這樣的Google Chrome擴展能夠適用於任何頁面。圖標每每位於瀏覽器地址欄外右側。點擊圖標將彈出窗口。
· page actions,這樣的Google Chrome擴展只能做用於某一頁面,當打開該頁面時觸發該Google Chrome擴展,關閉頁面則Google Chrome擴展也隨之消失。圖標每每位於瀏覽器地址欄內右端。
此外,Google Chrome擴展還支持其餘的可視界面:
· context menu,右鍵菜單
· options 頁面,Google Chrome擴展能夠有一個options 頁面,支持用戶定製Chrome擴展的運行參數。
· override頁面,Google Chrome擴展中的override頁面能夠替換瀏覽器中打開的默認頁面,如標籤管理器頁面chrome://bookmarks、瀏覽歷史記錄頁面chrome://history或新建Tab頁面chrome://newtab。不過,一個Google Chrome擴展只能替換一個默認頁面。
· 經過chrome.tabs.create()或window.open()打開的頁面
3) Google Chrome擴展與Web頁面/服務器之間的交互
· 經過content scripts,能夠實現Google Chrome擴展與用戶打開的Web頁面之間的交互。
· 經過跨域的 XMLHttpRequest,能夠實現Google Chrome擴展與其餘服務器之間的交互。
content scripts是一組JavaScript文件,運行在瀏覽器當前打開的頁面的上下文中,能夠讀取並修改當前打開的頁面DOM結構。事實上,content scripts能夠被看做是當前打開的頁面的組成部分。
4) 使用chrome.* API
Google Chrome擴展除了使用javascript的通用標準API以外,還可使用Chrome瀏覽器專有的API(稱爲chrome.* API).
不過,大多數chrome.* API都是異步調用,調用以後當即返回而不等待調用結果,因此對chrome.* API的調用每每都須要一個回調函數做爲參數以處理調用結果。
固然,也有少許chrome.* API是同步調用。這樣的chrome.* API每每都有一個返回類型,也無需回調函數做爲參數。
5) Google Chrome擴展中的頁面之間的數據通訊
Google Chrome擴展中的不一樣頁面之間每每要通訊,以調用彼此方法共享數據。因爲一個Google Chrome擴展中的全部頁面都運行於同一個進程中的同一個線程,因此各個頁面能夠經過必定的方法直接調用。
如經過chrome.extension.getViews()得到全部可視頁面的window對象的數組,經過chrome.extension.getBackgroundPage()得到不可視的background頁面的window對象。經過頁面的window對象就能夠對頁面的DOM進行任何操做。