谷歌浏览器扩展开发笔记
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
1,參考https://www.cnblogs.com/ligerleng/p/gmail_assist_1.html
2,知識(shí)點(diǎn):
page_action": 與之平級(jí)的還有另一個(gè)字段"browser_action",你的manifest中最多出現(xiàn)二者之一。直觀地來說,這倆屬性分別指明你的擴(kuò)展在特定網(wǎng)頁中才能用,還是打開瀏覽器后一直能用。更直觀的就是,你的擴(kuò)展的圖標(biāo)出現(xiàn)的位置不同,如下圖。
"background": 你的擴(kuò)展如果需要什么在后臺(tái)持續(xù)運(yùn)行的部分,就可以通過這個(gè)字段來指出。不僅是js,你還可以指定一個(gè)自己編寫的html,像這樣:
"background": {"page": "background.html","scripts": ["background.js"],"persistent": false } 如果僅僅指定js,chrome會(huì)自己生成一個(gè)html來在后臺(tái)跑你指定的腳本;當(dāng)然如果指定了你自己寫的html,它也不會(huì)顯示出來。
"persistent"值默認(rèn)為true。為true時(shí),你在background字段中指出的js腳本(注意格式是數(shù)組,因而可以有多個(gè)腳本)將持續(xù)運(yùn)行在后臺(tái),而若persistent為false,則這些腳本將只在事件活動(dòng)時(shí)運(yùn)行,事件不活動(dòng)時(shí)就會(huì)釋放其占有的內(nèi)存等資源。
那么在Chrome擴(kuò)展中運(yùn)行的腳本有哪些呢?我的理解是大致有這么四類:background、popup頁面內(nèi)的js、content script、injected js。
injected:
這種腳本,和原網(wǎng)頁自帶的腳本,就完全是一路貨了。
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字段里進(jìn)行聲明。
"web_accessible_resources" : [
? ? ? ? "oauth2/oauth2.html",
? ? ? ? "js/tableInited.js",
? ? ? ? "css/style.css",
? ? ? ? "js/table_sort_script.js",
? ? ? ? "images/sort.gif",
? ]
只有網(wǎng)頁通用的API是可用的,而chrome為擴(kuò)展提供的API(chrome.*),這種完全注入到用戶瀏覽的頁面中的腳本都不能訪問。
- 何時(shí)使用
我的建議是,僅當(dāng)你需要獲取被瀏覽頁面中原有js中的變量時(shí),才把你的腳本inject到用戶瀏覽的頁面中,然后通過接下來例子里這種方式,把它傳到content script中。當(dāng)然了,有一些單純地操縱DOM元素而不需要它們?cè)俜祷厥裁磾?shù)據(jù)的腳本,也可以直接inject到頁面里
2.content script
而是運(yùn)行在一個(gè)單獨(dú)的被隔離的環(huán)境中。它的生存周期也就是跟瀏覽的網(wǎng)頁一樣,最遲到網(wǎng)頁加載完全完成時(shí),content script就開始跑了,直到用戶當(dāng)前瀏覽的網(wǎng)頁被關(guān)閉。每次刷新時(shí)將重新載入。
- 網(wǎng)頁通用的API,跨域xhr請(qǐng)求,以及chrome為擴(kuò)展程序提供的API中的一部分
- 何時(shí)使用
-
需要操縱頁面DOM時(shí),需要與具體頁面匹配時(shí),需要接受injected js傳出來的數(shù)據(jù)時(shí),以及每次刷新網(wǎng)頁都需要重新載入的腳本,就可以作為content script來寫。
- 例子
-
向gmail服務(wù)器發(fā)xhr請(qǐng)求數(shù)據(jù)、操縱gmail頁面的DOM,把返回的數(shù)據(jù)顯示出來。
3.popup
- 可用API范圍
這類腳本和下一類(background),我都稱為“完全屬于擴(kuò)展程序的腳本”。它們不僅可以訪問普通網(wǎng)頁API、可以發(fā)起跨域xhr請(qǐng)求,而且可以訪問chrome為擴(kuò)展程序?qū)iT提供的API(即chrome.*)中的全部。
?
4.跑在后臺(tái)(background)頁面中的腳本
所謂的后臺(tái)腳本,在chrome擴(kuò)展中又分為兩類,分別運(yùn)行于后臺(tái)頁面(background page)和事件頁面(event page)中。兩者區(qū)別在于,前者(后臺(tái)頁面)持續(xù)運(yùn)行,生存周期和瀏覽器相同,即從打開瀏覽器到關(guān)閉瀏覽器期間,后臺(tái)腳本一直在運(yùn)行,一直占據(jù)著內(nèi)存等系統(tǒng)資源;而后者(事件頁面)只在需要活動(dòng)時(shí)活動(dòng),在完全不活動(dòng)的狀態(tài)持續(xù)幾秒后,chrome將會(huì)終止其運(yùn)行,從而釋放其占據(jù)的系統(tǒng)資源,而在再次有事件需要后臺(tái)腳本來處理時(shí),重新載入它。這兩類咋區(qū)分呢?通過你在manifest中的聲明:
"background": {"scripts": ["background.js"],"persistent": false },正如上一節(jié)說過的,這里persistent的值默認(rèn)是true,此時(shí)這個(gè)js就是運(yùn)行在后臺(tái)頁面的(持續(xù)的);若這個(gè)值為false,那就是事件頁面(非持續(xù)的)了。
- 何時(shí)使用
需要持續(xù)運(yùn)行在后臺(tái)的,肯定就選這種了,而且要把persistent置為true。需要在后臺(tái)處理些事件啊之類的,包括要用到content script無法訪問的擴(kuò)展程序?qū)S肁PI們時(shí),也應(yīng)該用這種,不過只要你不是需要它必須持續(xù)運(yùn)行的,就把它設(shè)置成事件頁面,從而提高性能。
?
?
轉(zhuǎn)載于:https://my.oschina.net/u/2367514/blog/1926516
總結(jié)
以上是生活随笔為你收集整理的谷歌浏览器扩展开发笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#windows服务开发
- 下一篇: 作为一个前端,可以如何机智地弄坏一台电脑