爬蟲可視化點選配置工具之chrome插件簡介

什麼是Chrome插件

Chrome插件是一個用Web技術開發、用來加強瀏覽器功能的軟件,它其實就是一個由HTML、CSS、JS、圖片等資源組成的一個.crx後綴的壓縮包.css

開發與調試

Chrome插件沒有嚴格的項目結構要求,只要保證本目錄有一個manifest.json便可,也不須要專門的IDE,普通的web開發工具便可。html

從右上角菜單->更多工具->擴展程序能夠進入 插件管理頁面,也能夠直接在地址欄輸入chrome://extensions 訪問。jquery

clipboard.png

所需功能介紹

網上介紹chrome插件開發的文章已經不少了,這裏就不贅述了,只列一些項目中須要的

manifest.json

這是一個Chrome插件最重要也是必不可少的文件,用來配置全部和插件相關的配置,必須放在根目錄。其中,manifest_versionnameversion3個是必不可少的,descriptionicons是推薦的。web

下面給出的是一些常見的配置項,均有中文註釋chrome

{
    // 清單文件的版本,這個必須寫,並且必須是2
    "manifest_version": 2,
    // 插件的名稱
    "name": "demo",
    // 插件的版本
    "version": "1.0.0",
    // 插件描述
    "description": "簡單的Chrome擴展demo",
    // 圖標,通常偷懶所有用一個尺寸的也沒問題
    "icons":
    {
        "16": "img/icon.png",
        "48": "img/icon.png",
        "128": "img/icon.png"
    },
    // 會一直常駐的後臺JS或後臺頁面
    "background":
    {
        // 2種指定方式,若是指定JS,那麼會自動生成一個背景頁
        "page": "background.html"
        //"scripts": ["js/background.js"]
    },
    // 瀏覽器右上角圖標設置,browser_action、page_action、app必須三選一
    "browser_action": 
    {
        "default_icon": "img/icon.png",
        // 圖標懸停時的標題,可選
        "default_title": "這是一個示例Chrome插件",
        "default_popup": "popup.html"
    },
    // 當某些特定頁面打開才顯示的圖標
    /*"page_action":
    {
        "default_icon": "img/icon.png",
        "default_title": "我是pageAction",
        "default_popup": "popup.html"
    },*/
    // 須要直接注入頁面的JS
    "content_scripts": 
    [
        {
            //"matches": ["http://*/*", "https://*/*"],
            // "<all_urls>" 表示匹配全部地址
            "matches": ["<all_urls>"],
            // 多個JS按順序注入
            "js": ["js/jquery-1.8.3.js", "js/content-script.js"],
            // JS的注入能夠隨便一點,可是CSS的注意就要千萬當心了,由於一不當心就可能影響全局樣式
            "css": ["css/custom.css"],
            // 代碼注入的時間,可選值: "document_start", "document_end", or "document_idle",最後一個表示頁面空閒時,默認document_idle
            "run_at": "document_start"
        },
        // 這裏僅僅是爲了演示content-script能夠配置多個規則
        {
            "matches": ["*://*/*.png", "*://*/*.jpg", "*://*/*.gif", "*://*/*.bmp"],
            "js": ["js/show-image-content-size.js"]
        }
    ],
    // 權限申請
    "permissions":
    [
        "contextMenus", // 右鍵菜單
        "tabs", // 標籤
        "notifications", // 通知
        "webRequest", // web請求
        "webRequestBlocking",
        "storage", // 插件本地存儲
        "http://*/*", // 能夠經過executeScript或者insertCSS訪問的網站
        "https://*/*" // 能夠經過executeScript或者insertCSS訪問的網站
    ],
    // 普通頁面可以直接訪問的插件資源列表,若是不設置是沒法直接訪問的
    "web_accessible_resources": ["js/inject.js"],
    // 插件主頁,這個很重要,不要浪費了這個免費廣告位
    "homepage_url": "https://www.baidu.com",
    // 覆蓋瀏覽器默認頁面
    "chrome_url_overrides":
    {
        // 覆蓋瀏覽器默認的新標籤頁
        "newtab": "newtab.html"
    },
    // Chrome40之前的插件配置頁寫法
    "options_page": "options.html",
    // Chrome40之後的插件配置頁寫法,若是2個都寫,新版Chrome只認後面這一個
    "options_ui":
    {
        "page": "options.html",
        // 添加一些默認的樣式,推薦使用
        "chrome_style": true
    },
    // 向地址欄註冊一個關鍵字以提供搜索建議,只能設置一個關鍵字
    "omnibox": { "keyword" : "go" },
    // 默認語言
    "default_locale": "zh_CN",
    // devtools頁面入口,注意只能指向一個HTML文件,不能是JS文件
    "devtools_page": "devtools.html"
}

content-scripts

所謂content-scripts,其實就是Chrome插件中向頁面注入腳本的一種形式(雖然名爲script,其實還能夠包括css的),藉助content-scripts咱們能夠實現經過配置的方式輕鬆向指定頁面注入JS和CSS(若是須要動態注入,能夠參考下文),最多見的好比:廣告屏蔽、頁面CSS定製,等等。json

示例配置:api

{
    // 須要直接注入頁面的JS
    "content_scripts": 
    [
        {
            //"matches": ["http://*/*", "https://*/*"],
            // "<all_urls>" 表示匹配全部地址
            "matches": ["<all_urls>"],
            // 多個JS按順序注入
            "js": ["js/jquery-1.8.3.js", "js/content-script.js"],
            // JS的注入能夠隨便一點,可是CSS的注意就要千萬當心了,由於一不當心就可能影響全局樣式
            "css": ["css/custom.css"],
            // 代碼注入的時間,可選值: "document_start", "document_end", or "document_idle",最後一個表示頁面空閒時,默認document_idle
            "run_at": "document_start"
        }
    ],
}

特別注意,若是沒有主動指定run_atdocument_start(默認爲document_idle),下面這種代碼是不會生效的跨域

document.addEventListener('DOMContentLoaded', function()
{
    console.log('我被執行了!');
});

content-scripts和原始頁面共享DOM,可是不共享JS,如要訪問頁面JS(例如某個JS變量),只能經過`injected
js來實現。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能夠注入到頁面,因此咱們將要開發的插件的主要功能就在這裏app

background

後臺(姑且這麼翻譯吧),是一個常駐的頁面,它的生命週期是插件中全部類型頁面中最長的,它隨着瀏覽器的打開而打開,隨着瀏覽器的關閉而關閉,因此一般把須要一直運行
的、啓動就運行的、全局的代碼放在background裏面。

background的權限很是高,幾乎能夠調用全部的Chrome擴展API(除了devtools),並且它能夠無限制跨域,也就是能夠跨域訪問任何網站而無須要
求對方設置CORS

通過測試,其實不止是background,全部的直接經過 chrome-extension://id/xx.html這種方式打開的網頁均可以無限制跨域。

配置中,background能夠經過page指定一張網頁,也能夠經過scripts直接指定一個JS,Chrome會自動爲這個JS生成一個默認的網頁:

{
    // 會一直常駐的後臺JS或後臺頁面
    "background":
    {
        // 2種指定方式,若是指定JS,那麼會自動生成一個背景頁
        "page": "background.html"
        //"scripts": ["js/background.js"]
    },
}

event-pages

這裏順帶介紹一下event-pages,它是一個什麼東西呢?鑑於background生命週期太長,長時間掛載後臺可能會影響性能,因此Google又弄一個event-pages,在配置文件上,它與background的惟一區別就是多了一個persistent參數:

{
    "background":
    {
        "scripts": ["event-page.js"],
        "persistent": false
    },
}

它的生命週期是:在被須要時加載,在空閒時被關閉,什麼叫被須要時呢?好比第一次安裝、插件更新、有content-script向它發送消息,等等。

咱們要開發的插件目前用到了background和content_scripts這兩個選項,若是之後添加新功能時再看看其餘的選項,對chrome插件開發感興趣的同窗能夠看看這本書

相關文章
相關標籤/搜索