谷歌浏览器扩展开发笔记
2019獨角獸企業重金招聘Python工程師標準>>>
1,參考https://www.cnblogs.com/ligerleng/p/gmail_assist_1.html
2,知識點:
page_action": 與之平級的還有另一個字段"browser_action",你的manifest中最多出現二者之一。直觀地來說,這倆屬性分別指明你的擴展在特定網頁中才能用,還是打開瀏覽器后一直能用。更直觀的就是,你的擴展的圖標出現的位置不同,如下圖。
"background": 你的擴展如果需要什么在后臺持續運行的部分,就可以通過這個字段來指出。不僅是js,你還可以指定一個自己編寫的html,像這樣:
"background": {"page": "background.html","scripts": ["background.js"],"persistent": false } 如果僅僅指定js,chrome會自己生成一個html來在后臺跑你指定的腳本;當然如果指定了你自己寫的html,它也不會顯示出來。
"persistent"值默認為true。為true時,你在background字段中指出的js腳本(注意格式是數組,因而可以有多個腳本)將持續運行在后臺,而若persistent為false,則這些腳本將只在事件活動時運行,事件不活動時就會釋放其占有的內存等資源。
那么在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字段里進行聲明。
"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到頁面里
2.content script
而是運行在一個單獨的被隔離的環境中。它的生存周期也就是跟瀏覽的網頁一樣,最遲到網頁加載完全完成時,content script就開始跑了,直到用戶當前瀏覽的網頁被關閉。每次刷新時將重新載入。
- 網頁通用的API,跨域xhr請求,以及chrome為擴展程序提供的API中的一部分
- 何時使用
-
需要操縱頁面DOM時,需要與具體頁面匹配時,需要接受injected js傳出來的數據時,以及每次刷新網頁都需要重新載入的腳本,就可以作為content script來寫。
- 例子
-
向gmail服務器發xhr請求數據、操縱gmail頁面的DOM,把返回的數據顯示出來。
3.popup
- 可用API范圍
這類腳本和下一類(background),我都稱為“完全屬于擴展程序的腳本”。它們不僅可以訪問普通網頁API、可以發起跨域xhr請求,而且可以訪問chrome為擴展程序專門提供的API(即chrome.*)中的全部。
?
4.跑在后臺(background)頁面中的腳本
所謂的后臺腳本,在chrome擴展中又分為兩類,分別運行于后臺頁面(background page)和事件頁面(event page)中。兩者區別在于,前者(后臺頁面)持續運行,生存周期和瀏覽器相同,即從打開瀏覽器到關閉瀏覽器期間,后臺腳本一直在運行,一直占據著內存等系統資源;而后者(事件頁面)只在需要活動時活動,在完全不活動的狀態持續幾秒后,chrome將會終止其運行,從而釋放其占據的系統資源,而在再次有事件需要后臺腳本來處理時,重新載入它。這兩類咋區分呢?通過你在manifest中的聲明:
"background": {"scripts": ["background.js"],"persistent": false },正如上一節說過的,這里persistent的值默認是true,此時這個js就是運行在后臺頁面的(持續的);若這個值為false,那就是事件頁面(非持續的)了。
- 何時使用
需要持續運行在后臺的,肯定就選這種了,而且要把persistent置為true。需要在后臺處理些事件啊之類的,包括要用到content script無法訪問的擴展程序專用API們時,也應該用這種,不過只要你不是需要它必須持續運行的,就把它設置成事件頁面,從而提高性能。
?
?
轉載于:https://my.oschina.net/u/2367514/blog/1926516
總結
以上是生活随笔為你收集整理的谷歌浏览器扩展开发笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#windows服务开发
- 下一篇: 阿里云发布vSphere虚拟机备份服务