1,參考https://www.cnblogs.com/ligerleng/p/gmail_assist_1.htmlcss
2,知識點:
page_action": 與之平級的還有另外一個字段"browser_action",你的manifest中最多出現兩者之一。直觀地來講,這倆屬性分別指明你的擴展在特定網頁中才能用,仍是打開瀏覽器後一直能用。更直觀的就是,你的擴展的圖標出現的位置不一樣,以下圖。
html
"background": 你的擴展若是須要什麼在後臺持續運行的部分,就能夠經過這個字段來指出。不只是js,你還能夠指定一個本身編寫的html,像這樣:web
"background": { "page": "background.html", "scripts": ["background.js"], "persistent": false }
若是僅僅指定js,chrome會本身生成一個html來在後臺跑你指定的腳本;固然若是指定了你本身寫的html,它也不會顯示出來。
"persistent"值默認爲true。爲true時,你在background字段中指出的js腳本(注意格式是數組,於是能夠有多個腳本)將持續運行在後臺,而若persistent爲false,則這些腳本將只在事件活動時運行,事件不活動時就會釋放其佔有的內存等資源。chrome
那麼在Chrome擴展中運行的腳本有哪些呢?個人理解是大體有這麼四類:background、popup頁面內的js、content script、injected js。跨域
injected:數組
這種腳本,和原網頁自帶的腳本,就徹底是一路貨了。瀏覽器
var s = document.createElement('script');
s.src = chrome.extension.getURL('tableInited.js');
s.onload = function() {
this.parentNode.removeChild(this);
};
(document.head || document.documentElement).appendChild(s);服務器
要注入的inject.js須要在manifest中的web_accessible_resources字段裏進行聲明。app
"web_accessible_resources" : [
"oauth2/oauth2.html",
"js/tableInited.js",
"css/style.css",
"js/table_sort_script.js",
"images/sort.gif",
]性能
只有網頁通用的API是可用的,而chrome爲擴展提供的API(chrome.*),這種徹底注入到用戶瀏覽的頁面中的腳本都不能訪問。
個人建議是,僅當你須要獲取被瀏覽頁面中原有js中的變量時,才把你的腳本inject到用戶瀏覽的頁面中,而後經過接下來例子裏這種方式,把它傳到content script中。固然了,有一些單純地操縱DOM元素而不須要它們再返回什麼數據的腳本,也能夠直接inject到頁面裏
而是運行在一個單獨的被隔離的環境中。它的生存週期也就是跟瀏覽的網頁同樣,最遲到網頁加載徹底完成時,content script就開始跑了,直到用戶當前瀏覽的網頁被關閉。每次刷新時將從新載入。
須要操縱頁面DOM時,須要與具體頁面匹配時,須要接受injected js傳出來的數據時,以及每次刷新網頁都須要從新載入的腳本,就能夠做爲content script來寫。
向gmail服務器發xhr請求數據、操縱gmail頁面的DOM,把返回的數據顯示出來。
這類腳本和下一類(background),我都稱爲「徹底屬於擴展程序的腳本」。它們不只能夠訪問普通網頁API、能夠發起跨域xhr請求,並且能夠訪問chrome爲擴展程序專門提供的API(即chrome.*)中的所有。
所謂的後臺腳本,在chrome擴展中又分爲兩類,分別運行於後臺頁面(background page)和事件頁面(event page)中。二者區別在於,前者(後臺頁面)持續運行,生存週期和瀏覽器相同,即從打開瀏覽器到關閉瀏覽器期間,後臺腳本一直在運行,一直佔據着內存等系統資源;然後者(事件頁面)只在須要活動時活動,在徹底不活動的狀態持續幾秒後,chrome將會終止其運行,從而釋放其佔據的系統資源,而在再次有事件須要後臺腳原本處理時,從新載入它。這兩類咋區分呢?經過你在manifest中的聲明:
"background": { "scripts": ["background.js"], "persistent": false },
正如上一節說過的,這裏persistent的值默認是true,此時這個js就是運行在後臺頁面的(持續的);若這個值爲false,那就是事件頁面(非持續的)了。
須要持續運行在後臺的,確定就選這種了,並且要把persistent置爲true。須要在後臺處理些事件啊之類的,包括要用到content script沒法訪問的擴展程序專用API們時,也應該用這種,不過只要你不是須要它必須持續運行的,就把它設置成事件頁面,從而提升性能。