nodejs + webpack4 + babel6 結合寫Chrome瀏覽器插件記錄


最近任務不忙,有時間了看一下Chrome插件相關的東西,於是想用nodejs + webpack寫一個能直出插件的小工具。

1.nodejs + babel6 + webpack4 

在寫之前,是有把它寫成依賴包之類的工具的,但是現在處於編碼調試階段,各個部分還沒有進行封裝,只是實現了相關的功能,后續會實現預計的構想。

1.nodejs部分

  nodejs部分主要實現了對manifest.json文件的解析和輸出功能,對接webpack功能。這里使用了nodemon來代替webpack自身的watch功能。

2.webpack4

  webpack主要應用了babel, html功能,分別對js和html進行處理,其中babel-loader讓我們像開發常規web站點一樣去模塊化開發瀏覽器插件,html部分則會讀取pages下所有的html頁面,並進行了壓縮。

2.manifest的重新規划

  

{
    "name": "bqcrx",
    "manifest_version": 2,
    "description": "create chrome extend plugin",
    "version": "1.0",
    "homepage_url": "http://hao8v.net",
    "icons": {
        "16": "img/app.png",
        "48": "img/app.png",
        "128": "img/app.png"
    },
    "scriptsAndCss": [{
        "js": ["./src/index.js"],
        "position": "document_start"
    }],
    "background": {
        "scripts": ["./src/background.js"]
    },
    "opentab": true,
    "browser_action": 
    {
        "icon": "img/icon.png",
        "title": "電影巷Chrome插件測試",
        "popup": "index.html"
    }
}

 

  1.權限

    Chrome插件里需要聲明應用的權限,這里做了一個偷懶的處理,如果你聲明了確切的權限,你就能獲取到相關的權限,如果沒有聲明,那么為了防止權限不夠,會給你所有的權限。

    

"permissions": [
        "contextMenus", // 右鍵菜單
        "tabs", // 標簽
        "notifications", // 通知
        "webRequest", // web請求
        "webRequestBlocking",
        "storage", // 插件本地存儲
        "http://*/*", // 可以通過executeScript或者insertCSS訪問的網站
        "https://*/*" // 可以通過executeScript或者insertCSS訪問的網站
        "activeTab"
],

  1.1 右鍵菜單

    這里封裝了一個簡單的lib,通過export 導出了contextMenu方法,來實現右鍵菜單的功能。

    

1 import { contextMenu } from './lib/chrome'
2 
3 contextMenu({
4     title: '請使用666搜索',
5     showSelect: true,
6     onclick: function() {
7         console.log('heiheihei')
8     }
9 })

  1.2 tabs標簽

    標簽權限在搜索,打開標簽頁,標簽頁之間通信等方面是離不開的。

    這里只測試了一個簡單的opentab, 其中opentab可以是true 或者 false,或者不填,為true則默認在打開新tab頁時打開本人個人常看電影的網站, 為false或者不寫則不會替換.

  

"opentab": true,

其他權限功能還沒應用。

 

   2.css和js

  CSS和JS有兩個部分,一種是content-script,一種是background,先說前一種。

  這里換成了scriptsAndCss字段代替,其中css和js依然是數組,css和js的路徑為相對路徑,生成的路徑中會轉化成對應的路徑。

  position則對應原來的run_at,指的是注入script的時機,值分別為document_start、document_end、document_idle(空閑),默認為document_idle

"scriptsAndCss": [{
        "js": ["./src/index.js"],
        "position": "document_start"
}],

  再說background, background的生命周期,是伴隨整個插件存在的,里面可以訪問到相應的Chrome權限能力。

 

  這里需要注意的是,content-script和頁面的變量是不共享,也就是說,假如你在頁面上引入了jQuery,那么你在content-script中的是無法使用jQuery的。

可是我就是想用怎么辦呢?有辦法。

  這里提供了一個inject:

  

injects: ['./src/inject.js', './src/inject1.js']

  那么我們就可以在inject引入的js中,愉快的去使用頁面中的變量了。

  3.其他

  

1     "name": "bqcrx",
2     "description": "create chrome extend plugin",
3     "version": "1.0",
4     "homepage_url": "http://hao8v.net",
5     "icons": {
6         "16": "img/app.png",
7         "48": "img/app.png",
8         "128": "img/app.png"
9     },

這樣,就可以通過npm命令去啟動開發啦~~~

 

GitHub項目地址:https://github.com/Greensoon/bq-createchr

 

其實一開始是想寫成一個vue或者react的一個庫,通過組件的形式去實現更加簡單方面的開發,希望有時間去推進和完成后續的功能。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM