Chrome 插件開發入門

2021-02-21 極地之猿


什麼是Chrome插件

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

        Chrome插件開發的技術棧是由Web技術(HTML,CSS,JS,圖片等)和 Chrome 底層 API 組成;完成插件開發後編譯成 .crx 壓縮包發布到應用商店;插件的不同模塊之間是相對獨立的,模塊之間的數據交互是異步通信,通信連接包含了短連接和長連接。

六大核心

        manifest.json 是 Chrome 插件中必須的配置文件,且必須放到項目的根目錄,文件中包括名字、版本、面板,權限,js 策略等配置,具體內容如下:

{    "manifest_version": 2,  "version": "1.0.0",  "name": "插件名字",  "description": "插件功能描述",    "icons": {    "19": "assets/icons/icon_19.png",    "38": "assets/icons/icon_38.png",    "128": "assets/icons/icon_128.png"  },    "background": {    "scripts": ["./background.js"]  },    "browser_action": {    "default_popup": "./popup.html"  },    "content_scripts": [    {            "matches": ["<all_urls>"],            "js": ["./assets/js/jquery.min.js", "./contentScripts.js"],            "run_at": "document_end",            "all_frames": true    }  ],    "content_security_policy": "script-src 'self' 'unsafe-eval' 'self'",    "options_ui": {    "chrome_style": false,    "page": "./options.html"  },    "devtools_page": "devtools.html",  "homepage_url": "插件中的官網地址URL",    "permissions": [    "http://*/*",    "https://*/*",    "file://*/*",    "background",    "bookmarks",    "clipboardRead",    "clipboardWrite",    "contentSettings",    "cookies",    "*://*.google.com/",    "debugger"  ],    "web_accessible_resources": [],    "chrome_url_overrides": {      "newtab": "newtab.html",      "history": "history.html",      "bookmarks": "bookmarks.html"  }}

        content-scripts腳本是注入當前web頁面中的 js 腳本;在 manifest.json 中的 content_scripts 節點配置;它有如下特點:

可以操作站點頁面 Dom 結構;

不能訪問站點中的 js 腳本;

只能訪問部分 Chrome 的 API;

例如:

$(window).on('load', () => {  $(document.body).css({    background: 'red',  })})

        background腳本是運行在後臺的 js 腳本;在 manifest.json 中的 background 節點配置;它有如下特點:

常用於創建頁面右鍵菜單、創建 omnibox 向用戶提供搜索建議和抽象公共接口服務等;

// 創建右鍵菜單chrome.contextMenus.create({  title: '京東搜:%s', // %s表示選中的文字  contexts: ['selection'], // 只有當選中文字時才會出現此右鍵菜單  onclick(params) {    chrome.tabs.create({      url: `https://search.jd.com/Search?keyword=${encodeURIComponent(        params.selectionText      )}`,    })  },})

效果:

        browser-action彈框是插件右上角獨立操作面板;在 manifest.json 中的 browser_action 節點配置;其中 default_popup 入口是 html 文件;除了 devtools 外可以訪問大部分 chromeAPI;常用於用戶交互操作,如下圖:

官網的關係圖:

        擴展開發者工具,在 manifest.json 中的 devtools_page 節點配置;允許開發自定義 Elements、Console、Sources 等同級別的面板,比如 Vue Devtools 和 React Devtools;它的生命周期同開發者工具一致的;並包含了特有的 API 如下:

Chrome.devtools.panelsChrome.devtools.inspectedWindowChrome.devtools.network

例如:

chrome.devtools.panels.elements.createSidebarPane('我的面板', sidebar => {  sidebar.setPage('../newpage.html');  sidebar.setHeight('100vh');});

<!DOCTYPE html><html lang="en">  <head>    <meta charset="UTF-8" />  </head>  <body>    我是新面板  </body></html>

效果:

        options設置面板是插件的用戶設置,在 manifest.json 中的 options_ui 節點配置;常用於讓用戶自定義選擇想要的功能。

桌面通知

        創建桌面通知,一般在 background 和 browser_action 中創建,代碼如下:

chrome.notifications.create({  type: 'basic',  iconUrl: '圖標地址',  title: '這是標題',  message: '這是提示內容',})

效果:

工程化

        以 webpack 為例,使用 webpack 插件 webpack-extension-reloader 實現熱加載,其中熱加載服務埠 參數 port,強加載參數 reloadPage,入口參數 entries 對應 webpack 的 entry 參數中的 key,extensionPage 是擴展的入口參數;

示例如下:

var ExtensionReloader = require('webpack-extension-reloader')
new ExtensionReloader({ port: 9090, reloadPage: true, entries: { background: 'background', options: 'options', popup: 'popup', contentScripts: 'contentScripts', extensionPage: [], },})

JS權限控制表

JS 種類

可訪問的 API

DOM 訪問情況

JS 訪問情況

是否可跨域

injectedScript和普通 JS 無任何差別,不能訪問 Chrome API可以可以

contentScript只能訪問 extension、runtime 等部分 API可以

不可

popup.js除了 devtools 外  

不可

不可

background.js除了 devtools 外  

不可

不可

devtools.js

只能訪問 devtools、extension、runtime 等部分 API可以可以否

消息通信表


injectedScript

contentScript

popup.js

background.js

injectedScript

-

postMessage

-
-

contentScript

postMessage

-

sendMessage 和 connect

sendMessage 和 connect

popup.js

-

sendMessage 和 connect

-

getBackgroundPage

background.js

-

sendMessage 和 connect

getViews

-

devtools.js

inspectedWindow.eval

-

sendMessage

sendMessage

相關焦點

  • Chrome擴展入門開發瀏覽器插件
    這次的練習是做一個Chrome的擴展,分享一下入門開發過程。。
  • chrome插件入門及如何利用react進行開發
    chrome 插件已經成為了我們工作中必不可少的工具,但是大部分同學都沒有去真正了解過 chrome 插件是如何開發的。本文就是帶大家一起了解學習如何開發 chrome 插件以及如何利用 react 進行 chrome 插件的開發。什麼是 chrome 插件?從 Google 的介紹中直譯過來,我們通常說的「chrome 插件」其實是指「chrome 擴展」,不過由於大家都已經習慣於叫它作為插件,所以我們也繼續以「插件」的名稱來稱呼。
  • 使用 React.js 開發 Chrome 插件
    Chrome插件/一、背景相信看到這篇文章的人應該都用過Chrome插件吧,最近剛好有個這方面的需求,我就把Chrome插件的相關知識學習了一下,發現其實Chrome插件的開發和大前端Web開發的底子是一樣的,無非就是runtime只限於Chrome瀏覽器,並且可以調用Chrome提供的一些
  • Chrome插件開發指南
    之前介紹過一個基於Chrome插件開發的無埋點可視化工具那麼,這篇文章就系統介紹一下Chrome插件開發,代碼連結附文後。
  • Chrome插件開發教程
    Chrome插件開發知識要點!! 本文先介紹插件的幾個核心知識點,再從項目實戰的角度深刻記憶它。簡介谷歌瀏覽器右上角的擴展插件(Chrome Extension)實際上是是更底層的瀏覽器功能擴展。Chrome插件是一個用Web技術開發、用來增強瀏覽器功能的軟體,它其實就是一個由HTML、CSS、JS、圖片等資源組成的一個.crx後綴的壓縮包。核心介紹manifest.json這是一個Chrome插件最重要也是必不可少的文件,用來配置所有和插件相關的配置,必須放在根目錄。
  • 【Chrome】678- Chrome插件開發全攻略
    插件是更底層的瀏覽器功能擴展,可能需要對瀏覽器源碼有一定掌握才有能力去開發。鑑於Chrome插件的叫法已經習慣,本文也全部採用這種叫法,但讀者需深知本文所描述的Chrome插件實際上指的是Chrome擴展。Chrome插件是一個用Web技術開發、用來增強瀏覽器功能的軟體,它其實就是一個由HTML、CSS、JS、圖片等資源組成的一個.crx後綴的壓縮包.
  • Chrome擴展插件開發小感想
    學習初衷 : 公司前端研發部門開發用的react狀態管理器使用了內部開發的react-model,當時看 README文檔的時候以為react-model
  • Chrome開發工具插件推薦
    我很喜歡這個插件,你可以查看所選部分或元素的完整 CSS,也可以在線編輯它的 CSS。推薦設計師和非設計師使用。為了克服這種困難,我們可以用這個插件。https://chrome.google.com/webstore/detail/session-buddy/edacconmaakjimmfgnblocblbcdcpbko
  • vuejs 初體驗— Chrome 插件開發實錄
    插件安裝地址(https://chrome.google.com/webstore/detail/animate-playerbox/lpjcokgibjaiedlkgjlkplfdppmehbeb),快來安裝體驗吧!作為一個程式設計師,搗鼓些小工具,不但可以學些新技術還可以提高我們的開發效率,何樂而不為呢。
  • Chrome插件(擴展)開發全攻略
    真正意義上的Chrome插件是更底層的瀏覽器功能擴展,可能需要對瀏覽器源碼有一定掌握才有能力去開發。鑑於Chrome插件的叫法已經習慣,本文也全部採用這種叫法,但讀者需深知本文所描述的Chrome插件實際上指的是Chrome擴展。Chrome插件是一個用Web技術開發、用來增強瀏覽器功能的軟體,它其實就是一個由HTML、CSS、JS、圖片等資源組成的一個.crx後綴的壓縮包.
  • 手把手帶你學會 Chrome 插件開發
    但是我們並不總是能夠找到符合我們所需要功能的插件,只能退而求其次地選擇其它工具。而事實上,你完全可以選擇自己開發一個。Chrome 插件的開發其實並不困難,開發語言都是前端同學非常熟悉的:HTML、CSS 和 JavaScript,再加上 Chrome 提供了大量功能強大的接口進行調用,我們能夠非常簡單迅速地實現一個滿足自己需求的插件。
  • 對開發人員有用的15個Chrome擴展插件
    雖然Chrome給我們提供了很多內置的擴展,似乎我們不再需要其他更多的工具了,但我們還是想向你介紹15個對WEB開發人員最佳的Chrome擴展插件。1、Web Developer為Chrome的Web開發者擴展增加了一個不同的工具欄,提供了一些不同的工具。絕對是開發人員最有用的瀏覽器擴展之一。
  • 利用Vue 腳手架 開發chrome 插件,太方便了!
    前言一個 Chrome 插件,
  • 【乾貨】Chrome插件(擴展)開發全攻略
    插件是更底層的瀏覽器功能擴展,可能需要對瀏覽器源碼有一定掌握才有能力去開發。鑑於Chrome插件的叫法已經習慣,本文也全部採用這種叫法,但讀者需深知本文所描述的Chrome插件實際上指的是Chrome擴展。Chrome插件是一個用Web技術開發、用來增強瀏覽器功能的軟體,它其實就是一個由HTML、CSS、JS、圖片等資源組成的一個.crx後綴的壓縮包.
  • 從 0 開始入門 Chrome Ext 安全(一) -- 了解一個 Chrome Ext
    並在19年4月8日,Edge正式放出了基於Chromium開發的Edge Dev瀏覽器,並提供了兼容Chrome Ext的配套插件管理。再加上國內的大小國產瀏覽器大多都是基於Chromium開發的,Chrome的插件體系越來越影響著廣大的人群。
  • 推薦 10 款 Chrome 開發工具插件
    https://chrome.google.com/webstore/detail/wappalyzer/gppongmhjkpfnbhagpmjfkannfbllamg我很喜歡這個插件,你可以查看所選部分或元素的完整 CSS,也可以在線編輯它的 CSS。推薦設計師和非設計師使用。
  • 如何從零開始開發一個 Chrome 插件?
    什麼是瀏覽器插件?簡單來說瀏覽器插件,是瀏覽器上的一種工具,可以提供一些瀏覽器沒有的功能,幫你做一些有趣的事情。開發者可以根據自己的喜歡,去實現一些功能。插件基於Web技術(html、css、js)構建。
  • 你一定要學會的Chrome插件
    1、不用傻傻地再去給某酷、某藝貢獻會員費還能看到超前點播的熱播電         視劇2、學一點初級的科學上網,能夠滿足日常瀏覽新聞的需求3、自己動手給chrome安裝各式各樣的插件,豐富自己的上網體驗所以即使你只是為了第一條來看這篇教學也要把chrome的插件學會喔那話不多說直接開講:一、chrome的安裝第一步也是最簡單的一步,幸好chrome
  • 6個可以幫助我們高效開發的Chrome插件
    chrome應用商店查看:https://chrome.google.com/webstore/detail/uri-splitter/fdfikmgcjjhkdpejagohhojbopclfckn2.
  • 效率工程篇-如何開發一個Chrome插件(二)
    前言書從上文:《效率工程篇-如何開發一個Chrome插件(一)》昨天我們簡要學習開發了一個簡單的Chrome插件,了解了開發Chrome插件的基本原理,但是相對於大多數的前端Coder來說,用習慣了各種前端開發框架之後,基於HTML,JavaScript,Css的原生開發多多少少會有些許的不方便