Chrome 插件開(kāi)發(fā)學(xué)習(xí)總結(jié)

1. 參考文檔

2. 文件結(jié)構(gòu)

文件結(jié)構(gòu).png

3. manifest.json

3.1 配置項(xiàng)

Name Description
manifest_version 清單文件的版本,這個(gè)必須寫,而且必須是2
name 插件的名稱
version 插件的版本
description 插件描述
icons 插件詳情頁(yè)面圖標(biāo)
background 會(huì)一直常駐的后臺(tái)JS或后臺(tái)頁(yè)面
browser_action 瀏覽器右上角圖標(biāo)以及popup頁(yè)面等設(shè)置,browser_action、page_action、app必須三選一
page_action 需要直接注入頁(yè)面的JS
permissions 權(quán)限申請(qǐng)
homepage_url 主頁(yè)地址
options_page 插件配置頁(yè)

3.2 background

常駐的后臺(tái)頁(yè)面,它的生命周期是插件中所有類型頁(yè)面中最長(zhǎng)的,它隨著瀏覽器的打開(kāi)而打開(kāi),隨著瀏覽器的關(guān)閉而關(guān)閉,所以通常把需要一直運(yùn)行的、啟動(dòng)就運(yùn)行的、全局的代碼放在background里面。

{
    "background":
    {
        "page": "background.html"
        //"scripts": ["js/background.js"]
    },
}

3.3 content-scripts

Chrome插件中向頁(yè)面注入腳本的一種形式,借助content-scripts我們可以實(shí)現(xiàn)通過(guò)配置的方式輕松向指定頁(yè)面注入js和css

{
    "content_scripts": 
    [
        {
            //"matches": ["http://*/*", "https://*/*"],
            // "<all_urls>" 表示匹配所有地址
            "matches": ["<all_urls>"],
            // 多個(gè)JS按順序注入
            "js": ["js/jquery-1.8.3.js", "js/content-script.js"],
            // css注入
            "css": ["css/custom.css"],
            // 代碼注入的時(shí)間,可選值: "document_start", "document_end", or "document_idle",最后一個(gè)表示頁(yè)面空閑時(shí),默認(rèn)document_idle
            "run_at": "document_start"
        }
    ],
}
Name Description
matches 必須。 定義哪些頁(yè)面需要注入content script
js 可選。 需要向頁(yè)面中注入的javascript文件,按定義順序注入。
run_at 可選。 控制content script注入的時(shí)機(jī)??梢允莇ocument_start,document_end或者document_idle。</br>缺省時(shí)是document_idle
all_frames 可選。控制是在匹配頁(yè)面的所有frame中運(yùn)行還是只在最上層的frame中運(yùn)行。</br>缺省是false,也就是只在最上層frame中運(yùn)行。
include_globs 可選。控制將content_script注入到哪些匹配的頁(yè)面中
exclude_globs 可選??刂茖ontent_script注入到哪些匹配的頁(yè)面中。

3.4 homepage url

開(kāi)發(fā)者或者插件主頁(yè)設(shè)置

"homepage_url": "http://zha-spstv-w10:4000/#/overall"
home_page.png

3.5 options page

options頁(yè)設(shè)置

"options_page": "html/options.html",
option_page.png

3.6 覆蓋特定頁(yè)面

使用替代頁(yè),可以將Chrome默認(rèn)的一些特定頁(yè)面替換掉,改為使用擴(kuò)展提供的頁(yè)面。

擴(kuò)展可以替代如下頁(yè)面:

  • 書(shū)簽管理器(bookmarks):從工具菜單上點(diǎn)擊書(shū)簽管理器時(shí)訪問(wèn)的頁(yè)面,或者從地址欄直接輸入 chrome://bookmarks
  • 歷史記錄(history):從工具菜單上點(diǎn)擊歷史記錄時(shí)訪問(wèn)的頁(yè)面,或者從地址欄直接輸入 chrome://history。
  • 新標(biāo)簽頁(yè)(newtabs):當(dāng)創(chuàng)建新標(biāo)簽的時(shí)候訪問(wèn)的頁(yè)面,或者從地址欄直接輸入 chrome://newtab。

注意:

  • 一個(gè)擴(kuò)展只能替代一個(gè)頁(yè)面。
  • 如果你替代隱身窗口的頁(yè)面,請(qǐng)注意要在manifest中將 incognito 屬性指定為 "spanning"。
  • 不能替代隱身窗口的新標(biāo)簽頁(yè)。
{
    "chrome_url_overrides": {
    "newtab": "html/newtab.html",
    // "history": "history.html",
    // "bookmarks": "bookmarks.html"
  },
}

3.7 桌面通知

3.8 Omnibox

omnibox 應(yīng)用程序界面允許向Google Chrome的地址欄注冊(cè)一個(gè)關(guān)鍵字,地址欄也叫omnibox。當(dāng)用戶輸入你的擴(kuò)展關(guān)鍵字,用戶開(kāi)始與你的擴(kuò)展交互。每個(gè)擊鍵都會(huì)發(fā)送給你的擴(kuò)展,擴(kuò)展提供建議作為相應(yīng)的響應(yīng)。

 "omnibox": { "keyword" : "go" }, 
omnibox.png

4. contextMenus

  • type (optional enumerated string ["normal", "checkbox", "radio", "separator"] )

    右鍵菜單項(xiàng)的類型。默認(rèn)為“normal”。

  • title ( optional string )

    右鍵菜單項(xiàng)的顯示文字;除非為“separator”類型,否則此參數(shù)是必須的。

  • checked ( optional boolean )

    checkbox或者radio的初始狀態(tài):true代表選中,false代表未選中。在給定的radio中只能有一個(gè)處于選中狀態(tài)。

  • contexts ( optional array of string ["all", "page", "frame", "selection", "link", "editable", "image", "video", "audio"] )

    右鍵菜單項(xiàng)將會(huì)在這個(gè)列表指定的上下文類型中顯示。默認(rèn)為“page”。

  • onclick ( optional function )

    當(dāng)菜單項(xiàng)被點(diǎn)擊時(shí)觸發(fā)的函數(shù)。

5. Permissions權(quán)限列表

https://blog.csdn.net/guoqiankunmiss/article/details/110491523

Name Description
notifications 擴(kuò)展程序訪問(wèn)chrome.notifications API
background 具有后臺(tái)權(quán)限,可以在后臺(tái)運(yùn)行,直到退出chrome
bookmarks 擴(kuò)展程序訪問(wèn)chrome.bookmarks API的權(quán)限
contentSettings 擴(kuò)展程序訪問(wèn)chrome.contentSettings API
contextMenus 開(kāi)啟右鍵菜單權(quán)限,擴(kuò)展程序訪問(wèn)chrome.contextMenus API
notifications 開(kāi)啟桌面通知權(quán)限,擴(kuò)展程序可以訪問(wèn)chrome.notifications API
webRequest 開(kāi)啟web請(qǐng)求權(quán)限,擴(kuò)展程序可以訪問(wèn)chrome.webRequest API
webRequestBlocking 擴(kuò)展程序以阻止方式使用chrome.webRequest API
cookies 擴(kuò)展程序訪問(wèn)chrome.cookies API。
debugger 擴(kuò)展程序訪問(wèn)chrome.debugger API
history 擴(kuò)展程序訪問(wèn)chrome.history

6. 結(jié)合vue-cli3開(kāi)發(fā)Chrome插件

6.1 搭建環(huán)境

  1. 安裝vue-cli3:npm install -g @vue/cli
  2. 創(chuàng)建一個(gè)vue-cli3項(xiàng)目:vue create vue-extension,對(duì)話流程選擇默認(rèn)就行。
  3. 安裝vue-cli-plugin-chrome-ext插件:vue add chrome-ext,根據(jù)安裝對(duì)話選項(xiàng)設(shè)置好。
  4. 安裝element-ui:npm install element-ui
  5. npm install babel-plugin-component -D

6.2 運(yùn)行項(xiàng)目

  1. npm run build-watch 運(yùn)行開(kāi)發(fā)環(huán)境
  2. npm run build 運(yùn)行生產(chǎn)環(huán)境編譯打包
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容