0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

寫(xiě)一個(gè)Chrome瀏覽器插件

京東云 ? 來(lái)源:jf_75140285 ? 作者:jf_75140285 ? 2024-11-18 17:12 ? 次閱讀

一、什么是瀏覽器插件

瀏覽器插件是依附于瀏覽器,用來(lái)拓展網(wǎng)頁(yè)能力的程序。插件具有監(jiān)聽(tīng)瀏覽器事件、獲取和修改網(wǎng)頁(yè)元素、攔截網(wǎng)絡(luò)請(qǐng)求、添加快捷菜單等功能。使用瀏覽器插件可以實(shí)現(xiàn)很多有趣的功能。

二、瀏覽器插件有哪些種類(lèi)

?以chromium為內(nèi)核的瀏覽器插件如Chrome

??firefox瀏覽器插件

???safari瀏覽器插件

本文只介紹Chrome插件的原生開(kāi)發(fā)流程。

三、插件目錄介紹

wKgaomc7BPCAMqkPAAEGcp5T_Z4361.png

a的文件名 文件介紹
manifest 核心配置文件,配置插件平臺(tái)版本、名稱(chēng)、權(quán)限、Aicon、Api權(quán)限、host權(quán)限等。
popup.html 插件彈出頁(yè)面,原生html、css頁(yè)面。
popup.js 插件頁(yè)面的腳本文件。
popup.css 插件頁(yè)面的樣式文件
background.js 后臺(tái)文件,可以監(jiān)聽(tīng)瀏覽器事件,在瀏覽器后臺(tái)持續(xù)運(yùn)行。
content.js 插入到頁(yè)面中的js腳本,可以監(jiān)聽(tīng)DOM事件,操作DOM元素。

四、開(kāi)始寫(xiě)一個(gè)插件

1. 配置manifest。

以下是一個(gè)基礎(chǔ)的manifest配置

wKgZomc7BPKAcelRAAX-1hHDX3o841.png

2. 寫(xiě)一個(gè)插件的彈框界面popup.html

和寫(xiě)html頁(yè)面一樣,在body里面寫(xiě)元素,但是需要注意樣式文件popup.css和腳本文件popup.js需要外部引入。

wKgaomc7BPOAI_FBAATEQ3mhtP4646.png

3. 寫(xiě)一個(gè)插件彈框界面的樣式文件popup.css。

4. 寫(xiě)一個(gè)插件彈框界面的腳本文件popup.js。

腳本文件的主要作用在于響應(yīng)插件彈窗的行為事件,并發(fā)送消息給內(nèi)容腳本或者后臺(tái)腳本。

以下代碼是在popup.js中,監(jiān)聽(tīng)id為tag元素的點(diǎn)擊事件,獲取當(dāng)前窗口active標(biāo)簽頁(yè),并給此標(biāo)簽頁(yè)推送一個(gè)message。

wKgZomc7BPWAVQeAAAOTimez9I8340.png

4. 寫(xiě)一個(gè)插件的內(nèi)容腳本content.js

content.js會(huì)被插入到網(wǎng)頁(yè)環(huán)境中,用于監(jiān)聽(tīng)瀏覽器事件,讀取和操作DOM元素。

以下代碼是監(jiān)聽(tīng)頁(yè)面load事件,和接收來(lái)自第三步中send的message。

window.addEventListener("load", function () {
    // 監(jiān)聽(tīng)頁(yè)面load事件
})

chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) {
 console.log("-----------");
 if (request.greeting === "tag") {
    console.log(request.greeting)
 }
});

5. 寫(xiě)一個(gè)插件的后臺(tái)腳本background.js

后臺(tái)腳本會(huì)在瀏覽器窗口打開(kāi)期間持續(xù)運(yùn)行,監(jiān)聽(tīng)瀏覽器事件,網(wǎng)絡(luò)請(qǐng)求等。

以下代碼是瀏覽器屏蔽漏某些url請(qǐng)求的實(shí)現(xiàn)。

wKgaomc7BPaAZCIVAAMl2qMOuM4596.png

?

把上述的幾個(gè)文件創(chuàng)建完成之后就實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的插件,然后直接安裝到瀏覽器擴(kuò)展即可。

?

五、解釋幾個(gè)消息發(fā)送和接收的Api

1. 獲取指定的瀏覽器標(biāo)簽頁(yè):

chrome.tabs.query({ active: true, currentWindow: true }, function (tabs) {})

2. 向指定標(biāo)簽頁(yè)中的內(nèi)容腳本發(fā)送一條消息,其中包含在發(fā)送回響應(yīng)時(shí)運(yùn)行的可選回調(diào)函數(shù)。在當(dāng)前擴(kuò)展程序的指定標(biāo)簽頁(yè)中運(yùn)行的每個(gè)內(nèi)容腳本中都會(huì)觸發(fā) runtime.onMessage 事件。

chrome.tabs.sendMessage(tabs[0].id, { greeting: "tag-remove" }, function (response) { console.log(response); });

3. 向擴(kuò)展程序或其他擴(kuò)展程序/應(yīng)用中的事件監(jiān)聽(tīng)器發(fā)送一條消息。請(qǐng)注意,擴(kuò)展程序無(wú)法使用此方法向內(nèi)容腳本發(fā)送消息。如需向內(nèi)容腳本發(fā)送消息,請(qǐng)使用

chrome.runtime.sendMessage( extensionId?: string, message: any, options?: object, callback?: function,)

4. onMessage,通過(guò)擴(kuò)展程序進(jìn)程(通過(guò) runtime.sendMessage)或內(nèi)容腳本(通過(guò) tabs.sendMessage)發(fā)送消息時(shí)觸發(fā)。

chrome.runtime.onMessage.addListener( callback: function,)

想了解其他瀏覽器插件Api,請(qǐng)點(diǎn)擊跳轉(zhuǎn)?

六、接下來(lái)讓我們豐富插件的能力

1. 實(shí)時(shí)刪除頁(yè)面上的元素,我們經(jīng)常會(huì)遇到一些煩人的廣告,刪掉他。廣告一般都是有固定的元素節(jié)點(diǎn)的,找到元素節(jié)點(diǎn)的class或者id,按以下處理。

以百度一下頁(yè)面舉例,以下代碼實(shí)時(shí)監(jiān)聽(tīng)網(wǎng)頁(yè)元素,發(fā)現(xiàn)class為s-p-top的元素后就會(huì)刪除改元素,這里我給被刪除元素的位置加了一個(gè)紅色邊框用來(lái)測(cè)試,實(shí)際使用中可以刪除添加紅框的代碼。

在content.js中添加以下代碼:

wKgZomc7BPiAJFc0AAjKHOlc644824.png

通過(guò)下面兩個(gè)圖對(duì)比可以看出使用插件后百度圖片被刪除了:

wKgaomc7BPmAH5kRAAPM-MQ_xaQ129.png

wKgaomc7BPyAQjDvAANCun_O_Y8035.png

2. 有人不習(xí)慣點(diǎn)開(kāi)右上角插件再點(diǎn)擊功能按鈕,怎么辦呢,簡(jiǎn)單,給瀏覽器右鍵菜單添加快捷鍵。

以下代碼為添加瀏覽器右鍵菜單的快捷鍵,并監(jiān)聽(tīng)菜單點(diǎn)擊事件,可在menu2中發(fā)起請(qǐng)求。

在background.js中:

wKgZomc7BP2AU0rrAAZnVLWXk9M005.png

效果如下:

wKgaomc7BP6Ac1rLAAMtNdh-FMg549.png

3. 還是攔截廣告,廣告可能出現(xiàn)在iframe中,但是呢我不想使用刪除DOM的方式,怎么辦呢,那就直接攔截網(wǎng)絡(luò)請(qǐng)求。

在background.js中:

wKgZomc7BQCAF9coAAN771BCkc0758.png

我們還以baidu.com為例,在MDN中測(cè)試,修改iframe src的值為baidu.com.

使用插件前結(jié)果如下:

wKgaoWc7BQGASLILAAKSO1TlPjQ097.png

使用插件后結(jié)果如下,可以發(fā)現(xiàn)iframe中沒(méi)有渲染baidu.com,并且在network中可以看到baidu.com被屏蔽了:

wKgZoWc7BQKAL2mnAAZ2aWIcEFQ761.png

4. 自定義一個(gè)自己的新開(kāi)頁(yè)

兩步走

第一步:在manifest中定義newtab(就是一個(gè)html文件,這個(gè)文件會(huì)覆蓋原生的瀏覽器新開(kāi)頁(yè))

wKgaoWc7BQOAOHeCAAJadBaIF1Y663.png

第二步:創(chuàng)建newtab.html文件,可以在這個(gè)文件定義新開(kāi)頁(yè)的樣式和js,且此樣式文件和js文件不用添加到content_scripts中

wKgZoWc7BQaAJO-6AARQo79jH7I822.png

效果如下

5. 標(biāo)記頁(yè)面文本

在閱讀網(wǎng)頁(yè)文檔時(shí),經(jīng)常會(huì)想標(biāo)記一些重點(diǎn)文本,可以直接用擴(kuò)展來(lái)實(shí)現(xiàn):

在background.js中:

wKgZoWc7BQyAPkjVAATkW8sWH38700.png

在content.js中:

wKgaoWc7BQ2ASvOXAAWfada-aU0454.png

效果:

wKgZoWc7BRCAVbfjAAWI-XRuibw899.gif

功能先豐富到這里,后面再繼續(xù)補(bǔ)充~

七、參考文檔

?chrome擴(kuò)展參考文檔?

?chrome Api文檔?

?manifest權(quán)限配置文檔?

?審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 插件
    +關(guān)注

    關(guān)注

    0

    文章

    339

    瀏覽量

    22947
  • chrome瀏覽器
    +關(guān)注

    關(guān)注

    0

    文章

    11

    瀏覽量

    7014
收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    Chrome 15正式版瀏覽器登場(chǎng)

    `Google今天發(fā)布了Chrome 15正式版,Windows、Linux、Mac三大平臺(tái)以及Chrome Frame瀏覽器內(nèi)嵌框架用戶均可更新至最新的Chrome 15.0.874
    發(fā)表于 10-26 18:49

    樹(shù)莓派安裝chrome瀏覽器的問(wèn)題

    如題,在安裝chrome瀏覽器的時(shí)候,出現(xiàn)如下圖問(wèn)題。怎么破?
    發(fā)表于 09-11 11:07

    安裝了chrome瀏覽器,但還是很卡

    在論壇看到了發(fā)燒友大神說(shuō)的關(guān)于瀏覽器的問(wèn)題,我也就安裝了chrome瀏覽器,但是還是卡爆了。CPU爆棚的說(shuō)。。。
    發(fā)表于 09-12 16:44

    Chrome瀏覽器將在ARM內(nèi)核運(yùn)行,Google Andr

    Chrome瀏覽器將在ARM內(nèi)核運(yùn)行,Google Android如虎添翼 Google將為其新發(fā)布的x86瀏覽器開(kāi)發(fā)個(gè)適用于ARM處理
    發(fā)表于 09-05 10:57 ?1446次閱讀

    視頻監(jiān)控系統(tǒng)跨瀏覽器插件的研究與實(shí)現(xiàn)

    針對(duì)目前視頻監(jiān)控系統(tǒng)的瀏覽器插件與非IE內(nèi)核的瀏覽器不兼容的問(wèn)題,本文采用基于FireBreath開(kāi)發(fā)框架開(kāi)發(fā)跨瀏覽器插件系統(tǒng)的方法,使
    發(fā)表于 12-18 16:03 ?5次下載

    四大瀏覽器續(xù)航對(duì)決,結(jié)果Chrome瀏覽器完勝

    近日,YouTube頻道UP主Linus Tech Tips進(jìn)行了次四大瀏覽器續(xù)航對(duì)決,結(jié)果Chrome瀏覽器完勝。
    發(fā)表于 06-27 10:16 ?1477次閱讀

    Chrome成為瀏覽器市場(chǎng)的霸主 微軟Edge慘淡收?qǐng)?/a>

    瀏覽器競(jìng)爭(zhēng)的賽道上,微軟Edge算是徹底輸了。微軟為與Chrome競(jìng)爭(zhēng)重新啟動(dòng)Edge瀏覽器,但結(jié)果確實(shí)不如人意。如今Chrome已徹底統(tǒng)治瀏覽器
    發(fā)表于 02-03 10:23 ?904次閱讀

    谷歌瀏覽器 Chrome 發(fā)布 Linux 版本即將跟進(jìn)

    把地址欄在上標(biāo)簽在下的傳統(tǒng),界面相當(dāng)簡(jiǎn)潔,而且界面很有 Google 的風(fēng)格,與我們平時(shí)所用的 Google 產(chǎn)品的配色方案是類(lèi)似的。?先要下載個(gè)安裝程序,然后安裝程序會(huì)連接到網(wǎng)絡(luò)下載瀏覽器需要
    發(fā)表于 04-02 14:38 ?653次閱讀

    Chrome瀏覽器隱私設(shè)置重新設(shè)計(jì)后有什么不同

    Chromium小組重新設(shè)計(jì)了Chrome瀏覽器的“隱私設(shè)置”或Chrome 80中的“隱私和安全設(shè)置”卡。
    的頭像 發(fā)表于 11-16 09:37 ?2482次閱讀

    谷歌計(jì)劃通過(guò)Lacros將Chrome瀏覽器Chrome系統(tǒng)分離

    Chromebook 用戶可能直以來(lái)有個(gè)煩惱:由于 Chrome 瀏覽器Chrome O
    的頭像 發(fā)表于 09-14 14:04 ?2383次閱讀

    五大Chrome神級(jí)插件,讓Chrome瀏覽器更加好用十倍

    Chrome谷歌瀏覽器是很多人心目中的NO.1,雖然它很好用,但難免還是有些功能顧及不到。這時(shí)候,就需要插件來(lái)幫忙。今天介紹5個(gè)Chrome
    的頭像 發(fā)表于 09-17 14:05 ?3458次閱讀

    谷歌 Chrome 解決性能問(wèn)題,增大瀏覽器緩存

    外媒 Bleeping Computer 報(bào)道,谷歌 Chrome 瀏覽器開(kāi)發(fā)人員最近解決了個(gè)安全問(wèn)題,按網(wǎng)站對(duì)瀏覽器緩存進(jìn)行分區(qū),而不是
    的頭像 發(fā)表于 12-28 11:58 ?3351次閱讀

    Chrome瀏覽器插件v1.9.0發(fā)布 使用了最簡(jiǎn)單的JavaScript代碼解析

    距 OSCHINA Chrome 瀏覽器插件 發(fā)布 上一個(gè)版本已經(jīng)8個(gè)月了,這段時(shí)間 OSCHINA 社區(qū)也做了多次改版,首屈
    的頭像 發(fā)表于 01-08 11:39 ?2163次閱讀
    <b class='flag-5'>Chrome</b><b class='flag-5'>瀏覽器</b><b class='flag-5'>插件</b>v1.9.0發(fā)布 使用了最簡(jiǎn)單的JavaScript代碼解析

    暴力猴瀏覽器插件

    暴力猴瀏覽器插件
    發(fā)表于 05-29 11:20 ?7次下載

    瀏覽器原理解析Chrome常見(jiàn)插件的實(shí)現(xiàn)思路

    近期Chrome進(jìn)程架構(gòu) 從圖中可以看出,最新的 Chrome 瀏覽器包括:1 個(gè)瀏覽器主進(jìn)程、1 個(gè)
    的頭像 發(fā)表于 12-08 14:25 ?1178次閱讀
    從<b class='flag-5'>瀏覽器</b>原理解析<b class='flag-5'>Chrome</b>常見(jiàn)<b class='flag-5'>插件</b>的實(shí)現(xiàn)思路

    電子發(fā)燒友

    中國(guó)電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品