摘要:從右上角菜單更多工具擴(kuò)展程序可以進(jìn)入插件管理頁面,也可以直接在地址欄輸入訪問。其中,個是必不可少的,和是推薦的。
什么是Chrome插件
Chrome插件是一個用Web技術(shù)開發(fā)、用來增強(qiáng)瀏覽器功能的軟件,它其實就是一個由HTML、CSS、JS、圖片等資源組成的一個.crx后綴的壓縮包.
開發(fā)與調(diào)試Chrome插件沒有嚴(yán)格的項目結(jié)構(gòu)要求,只要保證本目錄有一個manifest.json即可,也不需要專門的IDE,普通的web開發(fā)工具即可。
從右上角菜單->更多工具->擴(kuò)展程序可以進(jìn)入 插件管理頁面,也可以直接在地址欄輸入chrome://extensions 訪問。
所需功能介紹網(wǎng)上介紹chrome插件開發(fā)的文章已經(jīng)很多了,這里就不贅述了,只列一些項目中需要的manifest.json
這是一個Chrome插件最重要也是必不可少的文件,用來配置所有和插件相關(guān)的配置,必須放在根目錄。其中,manifest_version、name、version3個是必不可少的,description和icons是推薦的。
下面給出的是一些常見的配置項,均有中文注釋
{ // 清單文件的版本,這個必須寫,而且必須是2 "manifest_version": 2, // 插件的名稱 "name": "demo", // 插件的版本 "version": "1.0.0", // 插件描述 "description": "簡單的Chrome擴(kuò)展demo", // 圖標(biāo),一般偷懶全部用一個尺寸的也沒問題 "icons": { "16": "img/icon.png", "48": "img/icon.png", "128": "img/icon.png" }, // 會一直常駐的后臺JS或后臺頁面 "background": { // 2種指定方式,如果指定JS,那么會自動生成一個背景頁 "page": "background.html" //"scripts": ["js/background.js"] }, // 瀏覽器右上角圖標(biāo)設(shè)置,browser_action、page_action、app必須三選一 "browser_action": { "default_icon": "img/icon.png", // 圖標(biāo)懸停時的標(biāo)題,可選 "default_title": "這是一個示例Chrome插件", "default_popup": "popup.html" }, // 當(dāng)某些特定頁面打開才顯示的圖標(biāo) /*"page_action": { "default_icon": "img/icon.png", "default_title": "我是pageAction", "default_popup": "popup.html" },*/ // 需要直接注入頁面的JS "content_scripts": [ { //"matches": ["http://*/*", "https://*/*"], // "content-scripts" 表示匹配所有地址 "matches": [" "], // 多個JS按順序注入 "js": ["js/jquery-1.8.3.js", "js/content-script.js"], // JS的注入可以隨便一點(diǎn),但是CSS的注意就要千萬小心了,因為一不小心就可能影響全局樣式 "css": ["css/custom.css"], // 代碼注入的時間,可選值: "document_start", "document_end", or "document_idle",最后一個表示頁面空閑時,默認(rèn)document_idle "run_at": "document_start" }, // 這里僅僅是為了演示content-script可以配置多個規(guī)則 { "matches": ["*://*/*.png", "*://*/*.jpg", "*://*/*.gif", "*://*/*.bmp"], "js": ["js/show-image-content-size.js"] } ], // 權(quán)限申請 "permissions": [ "contextMenus", // 右鍵菜單 "tabs", // 標(biāo)簽 "notifications", // 通知 "webRequest", // web請求 "webRequestBlocking", "storage", // 插件本地存儲 "http://*/*", // 可以通過executeScript或者insertCSS訪問的網(wǎng)站 "https://*/*" // 可以通過executeScript或者insertCSS訪問的網(wǎng)站 ], // 普通頁面能夠直接訪問的插件資源列表,如果不設(shè)置是無法直接訪問的 "web_accessible_resources": ["js/inject.js"], // 插件主頁,這個很重要,不要浪費(fèi)了這個免費(fèi)廣告位 "homepage_url": "https://www.baidu.com", // 覆蓋瀏覽器默認(rèn)頁面 "chrome_url_overrides": { // 覆蓋瀏覽器默認(rèn)的新標(biāo)簽頁 "newtab": "newtab.html" }, // Chrome40以前的插件配置頁寫法 "options_page": "options.html", // Chrome40以后的插件配置頁寫法,如果2個都寫,新版Chrome只認(rèn)后面這一個 "options_ui": { "page": "options.html", // 添加一些默認(rèn)的樣式,推薦使用 "chrome_style": true }, // 向地址欄注冊一個關(guān)鍵字以提供搜索建議,只能設(shè)置一個關(guān)鍵字 "omnibox": { "keyword" : "go" }, // 默認(rèn)語言 "default_locale": "zh_CN", // devtools頁面入口,注意只能指向一個HTML文件,不能是JS文件 "devtools_page": "devtools.html" }
所謂content-scripts,其實就是Chrome插件中向頁面注入腳本的一種形式(雖然名為script,其實還可以包括css的),借助content-scripts我們可以實現(xiàn)通過配置的方式輕松向指定頁面注入JS和CSS(如果需要動態(tài)注入,可以參考下文),最常見的比如:廣告屏蔽、頁面CSS定制,等等。
示例配置:
{ // 需要直接注入頁面的JS "content_scripts": [ { //"matches": ["http://*/*", "https://*/*"], // "" 表示匹配所有地址 "matches": [" "], // 多個JS按順序注入 "js": ["js/jquery-1.8.3.js", "js/content-script.js"], // JS的注入可以隨便一點(diǎn),但是CSS的注意就要千萬小心了,因為一不小心就可能影響全局樣式 "css": ["css/custom.css"], // 代碼注入的時間,可選值: "document_start", "document_end", or "document_idle",最后一個表示頁面空閑時,默認(rèn)document_idle "run_at": "document_start" } ], }
特別注意,如果沒有主動指定run_at為document_start(默認(rèn)為document_idle),下面這種代碼是不會生效的
document.addEventListener("DOMContentLoaded", function() { console.log("我被執(zhí)行了!"); });
content-scripts和原始頁面共享DOM,但是不共享JS,如要訪問頁面JS(例如某個JS變量),只能通過`injected
js來實現(xiàn)。content-scripts不能訪問絕大部分chrome.xxx.api`,除了下面這4種:
chrome.extension(getURL , inIncognitoContext , lastError , onRequest , sendRequest)
chrome.i18n
chrome.runtime(connect , getManifest , getURL , id , onConnect , onMessage , sendMessage)
chrome.storage
由于content-script可以注入到頁面,所以我們將要開發(fā)的插件的主要功能就在這里
background后臺(姑且這么翻譯吧),是一個常駐的頁面,它的生命周期是插件中所有類型頁面中最長的,它隨著瀏覽器的打開而打開,隨著瀏覽器的關(guān)閉而關(guān)閉,所以通常把需要一直運(yùn)行
的、啟動就運(yùn)行的、全局的代碼放在background里面。
background的權(quán)限非常高,幾乎可以調(diào)用所有的Chrome擴(kuò)展API(除了devtools),而且它可以無限制跨域,也就是可以跨域訪問任何網(wǎng)站而無需要
求對方設(shè)置CORS。
經(jīng)過測試,其實不止是background,所有的直接通過chrome-extension://id/xx.html這種方式打開的網(wǎng)頁都可以無限制跨域。
配置中,background可以通過page指定一張網(wǎng)頁,也可以通過scripts直接指定一個JS,Chrome會自動為這個JS生成一個默認(rèn)的網(wǎng)頁:
{ // 會一直常駐的后臺JS或后臺頁面 "background": { // 2種指定方式,如果指定JS,那么會自動生成一個背景頁 "page": "background.html" //"scripts": ["js/background.js"] }, }event-pages
這里順帶介紹一下event-pages,它是一個什么東西呢?鑒于background生命周期太長,長時間掛載后臺可能會影響性能,所以Google又弄一個event-pages,在配置文件上,它與background的唯一區(qū)別就是多了一個persistent參數(shù):
{ "background": { "scripts": ["event-page.js"], "persistent": false }, }
它的生命周期是:在被需要時加載,在空閑時被關(guān)閉,什么叫被需要時呢?比如第一次安裝、插件更新、有content-script向它發(fā)送消息,等等。
我們要開發(fā)的插件目前用到了background和content_scripts這兩個選項,如果以后添加新功能時再看看其他的選項,對chrome插件開發(fā)感興趣的同學(xué)可以看看這本書
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/71706.html
摘要:使用開發(fā)插件的好處本次開發(fā)的插件是抓取配置插件,有很多的表單以及彈出層,如果純使用的話會有很多動態(tài)創(chuàng)建的操作。使用和的語法以及的加載器相配合,可以減少大量動態(tài)創(chuàng)建的代碼。 使用vue開發(fā)chrome插件的好處 本次開發(fā)的插件是抓取配置插件,有很多的form表單以及彈出層,如果純使用js的話會有很多動態(tài)創(chuàng)建dom的操作。使用vue和ES6的import語法以及webpack的html加載...
摘要:類型指定可能被其他元素包含的后代元素。這樣頁面選擇函數(shù)就寫完了,下面就是引用了,在中添加函數(shù)點(diǎn)擊以上就完成了頁面選擇功能 前言 前面兩章已經(jīng)介紹怎么開發(fā)一個chrome插件和怎么使用vue搭建一個彈出框的chrome插件,這一章來實現(xiàn)頁面元素選擇的功能,效果如下圖,鼠標(biāo)放到元素上,元素會高亮: showImg(https://segmentfault.com/img/bVbilIx?w...
摘要:寫此文的目的是為了總結(jié)在開發(fā)中能增加我們開發(fā)速度及能給我們帶來方便的工具與網(wǎng)站及一些小眾框架只限于簡介不負(fù)責(zé)教程如有相應(yīng)的教程希望大家自薦或推薦我在這里感激不盡讓我們發(fā)現(xiàn)美并記錄它第一次寫文章請多多包涵如有我沒有寫到的但又是一些好用的工具及 寫此文的目的是為了總結(jié)在開發(fā)中能增加我們開發(fā)速度及能給我們帶來方便的工具與網(wǎng)站及一些小眾框架只限于簡介不負(fù)責(zé)教程如有相應(yīng)的教程希望大家自薦或推薦我...
摘要:寫此文的目的是為了總結(jié)在開發(fā)中能增加我們開發(fā)速度及能給我們帶來方便的工具與網(wǎng)站及一些小眾框架只限于簡介不負(fù)責(zé)教程如有相應(yīng)的教程希望大家自薦或推薦我在這里感激不盡讓我們發(fā)現(xiàn)美并記錄它第一次寫文章請多多包涵如有我沒有寫到的但又是一些好用的工具及 寫此文的目的是為了總結(jié)在開發(fā)中能增加我們開發(fā)速度及能給我們帶來方便的工具與網(wǎng)站及一些小眾框架只限于簡介不負(fù)責(zé)教程如有相應(yīng)的教程希望大家自薦或推薦我...
閱讀 3541·2021-11-25 09:43
閱讀 2761·2021-09-22 15:54
閱讀 650·2019-08-30 15:55
閱讀 1034·2019-08-30 15:55
閱讀 2074·2019-08-30 15:55
閱讀 1799·2019-08-30 15:53
閱讀 3532·2019-08-30 15:52
閱讀 2105·2019-08-30 12:55