成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Chrome 擴(kuò)展開發(fā)——編寫一個(gè)自己的瀏覽器插件

SunZhaopeng / 2022人閱讀

摘要:配置文件每一個(gè)擴(kuò)展都有一個(gè)格式的文件,叫。此消息發(fā)送后會(huì)觸發(fā)擴(kuò)展內(nèi)每個(gè)頁(yè)面的事件。和持續(xù)長(zhǎng)時(shí)間的保持會(huì)話需要在和擴(kuò)展建立一個(gè)長(zhǎng)時(shí)間存在的通道。內(nèi)容腳本發(fā)送消息到擴(kuò)展程序建立通道,并給通道命名利用通道發(fā)送一條消息。

這次的練習(xí)是做一個(gè)Chrome的擴(kuò)展,分享一下入門開發(fā)過(guò)程。因?yàn)樵谙鬟f那塊糾結(jié)了特別久,所以我會(huì)重點(diǎn)總結(jié)消息傳遞那塊。

這次做這個(gè)插件的功能很簡(jiǎn)單,就是點(diǎn)擊按鈕后可以對(duì)當(dāng)前網(wǎng)頁(yè)的模塊進(jìn)行選擇隱藏。
做這個(gè)插件一方面是練習(xí)實(shí)例,還有一方面是,有的時(shí)候查資料啊,邊上總有很多花花綠綠動(dòng)來(lái)動(dòng)去的小廣告!
很煩有木有,還根本不能關(guān)閉!就算有關(guān)閉按鈕,點(diǎn)擊了竟然還跳轉(zhuǎn)到廣告頁(yè)面了(?Д?≡?Д?)
所以就想做個(gè)小插件,讓自己可以選擇隱藏這些不想看的模塊。
配置文件

每一個(gè)擴(kuò)展都有一個(gè)JSON格式的manifest文件,叫manifest.json。

所以第一步我們將創(chuàng)建一個(gè)manifest.json文件。如下:

{ 
    "manifest_version": 2, //固定的
    "name": "Cissy"s First Extension", //插件名稱
    "version": "1.0", //插件使用的版本
    "description": "The first extension that CC made.", //插件的描述
    "browser_action": { //插件加載后生成圖標(biāo)
        "default_icon": "cc.gif",//圖標(biāo)的圖片
        "default_title": "Hello CC", //鼠標(biāo)移到圖標(biāo)顯示的文字 
        "default_popup": "popup.html" //單擊圖標(biāo)執(zhí)行的文件
    }, 
    "permissions": [ //允許插件訪問(wèn)的url
        "http://*/", 
        "bookmarks", 
        "tabs", 
        "history" 
    ], 
    "background":{//background script即插件運(yùn)行的環(huán)境
        "page":"background.html"
        // "scripts": ["js/jquery-1.9.1.min.js","js/background.js"]//數(shù)組.chrome會(huì)在擴(kuò)展啟動(dòng)時(shí)自動(dòng)創(chuàng)建一個(gè)包含所有指定腳本的頁(yè)面
    }, 
     "content_scripts": [{  //對(duì)頁(yè)面內(nèi)容進(jìn)行操作的腳本
         "matches": ["http://*/*","https://*/*"],  //滿足什么條件執(zhí)行該插件 
         "js": ["js/jquery-1.9.1.min.js", "js/js.js"],   
         "run_at": "document_start",  //在document加載時(shí)執(zhí)行該腳本
    }] 
}

每個(gè)字段的信息我都用注釋標(biāo)明了,接下來(lái)就重點(diǎn)說(shuō)下一些重要字段。

需要注意:

chrome不允許擴(kuò)展中的HTML頁(yè)面內(nèi)直接內(nèi)嵌js腳本,而要求所有的腳本都作為外部src來(lái)引入

browser_action

如果browser action擁有一個(gè)popup(即設(shè)置了default_popup),popup 可以包含任意你想要的HTML內(nèi)容,并且會(huì)自適應(yīng)大小。popup 會(huì)在用戶點(diǎn)擊圖標(biāo)后出現(xiàn)。若沒(méi)有設(shè)置default_popup,將執(zhí)行chrome.browserAction.onClicked的內(nèi)容,若沒(méi)有設(shè)置,就什么都不執(zhí)行了。也就是如果設(shè)置了default_popup,就不會(huì)執(zhí)行chrome.browserAction.onClicked了。

和browser_action對(duì)應(yīng)的還有一個(gè)page_action,區(qū)別在于:Browser Action對(duì)在瀏覽器中加載的所有網(wǎng)頁(yè)都生效;Page Action針對(duì)特定的網(wǎng)頁(yè)生效。一個(gè)Extension最多可以有一個(gè)Browser Action或者Page Action。這里選用Browser Action。

background

background是插件的運(yùn)行環(huán)境。若設(shè)置了scripts字段,瀏覽器的擴(kuò)展系統(tǒng)會(huì)自動(dòng)根據(jù)scripts字段指定的所有js文件自動(dòng)生成背景頁(yè)。也可以直接page字段,指定背景頁(yè)。兩者只能設(shè)置一個(gè)。

一般情況下,我們會(huì)讓將擴(kuò)展的主要邏輯都放在 background 中比較便于管理。其它頁(yè)面可以通過(guò)消息傳遞的機(jī)制與 background 進(jìn)行通訊。理論上 content script 與 popup 之間也可以傳遞消息,但不建議這么做。

消息傳遞

由于插件的js運(yùn)行環(huán)境有區(qū)別,所以消息傳遞機(jī)制是一個(gè)重要內(nèi)容。

一次簡(jiǎn)單的請(qǐng)求

如果僅需要給你自己的擴(kuò)展的另外一部分發(fā)送一個(gè)消息(可選的是否得到答復(fù)),你可以簡(jiǎn)單地使用chrome.extension.sendRequest()或者chrome.tabs.sendRequest()方法。這個(gè)方法可以幫助你傳送一次JSON序列化消息從content script到擴(kuò)展,反之亦然。如果接受消息的一方存在的話,可選的回調(diào)參數(shù)允許處理傳回來(lái)的消息。

sendRequest() 是Chrome33之前的API,33之后還是使用sendMessage()吧。

內(nèi)容腳本發(fā)送消息到擴(kuò)展程序

chrome.extension.sendMessage({hello: "Cissy"}, function(response) {
    console.log(response.farewell);
});

擴(kuò)展程序發(fā)送消息到內(nèi)容腳本

chrome.tabs.sendMessage(tab.id, {hello: "Cissy"}, function(response) {
    console.log(response.farewell);
});

接收消息
chrome.extension.sendMessage()向擴(kuò)展內(nèi)的其它監(jiān)聽者發(fā)送一條消息。此消息發(fā)送后會(huì)觸發(fā)擴(kuò)展內(nèi)每個(gè)頁(yè)面的chrome.extension.onMessage()事件。

我用的是長(zhǎng)時(shí)間的保持連接,原理差不多,就是調(diào)用接口的區(qū)別,所以就不具體介紹這個(gè)了 詳細(xì)的可以看開發(fā)文檔

長(zhǎng)時(shí)間的保持連接 background 和 popup

同一個(gè)Extension的Extension Page(包括background、popup、tab、infobar、notification)都是運(yùn)行在同一個(gè)進(jìn)程中的,所以background 和 popup 之間可以直接相互調(diào)用對(duì)方的方法,不需要消息傳遞。

popup調(diào)用background中變量或方法

var bg = chrome.extension.getBackgroundPage();//獲取background頁(yè)面
console.log(bg.a);//調(diào)用background的變量或方法。

background調(diào)用popup中變量或方法

var pop = chrome.extension.getViews({type:"popup"});//獲取popup頁(yè)面
console.log(pop[0].b);//調(diào)用第一個(gè)popup的變量或方法。

這里要注意一定要指明type,如果沒(méi)有指定,則獲取Background Page之外的所有Extension Page的window對(duì)象 。(??ˇ?ˇ??)這個(gè)地方真的糾結(jié)好久。然后就是background是一個(gè)運(yùn)行在擴(kuò)展進(jìn)程中的HTML頁(yè)面。它在你的擴(kuò)展的整個(gè)生命周期都存在,而popup是在你點(diǎn)擊了圖標(biāo)之后才存在,所以,在獲取popup變量時(shí),請(qǐng)確認(rèn)popup已打開。

background 和 content

持續(xù)長(zhǎng)時(shí)間的保持會(huì)話需要在content script和擴(kuò)展建立一個(gè)長(zhǎng)時(shí)間存在的通道。當(dāng)建立連接,兩端都有一個(gè)Port 對(duì)象通過(guò)這個(gè)連接發(fā)送和接收消息。

內(nèi)容腳本發(fā)送消息到擴(kuò)展程序

var bac = chrome.extension.connect({name: "ConToBg"});//建立通道,并給通道命名
bac.postMessage({hello: "Cissy"});//利用通道發(fā)送一條消息。

擴(kuò)展程序發(fā)送消息到內(nèi)容腳本
擴(kuò)展程序發(fā)送消息到內(nèi)容腳本與前面類似,但需要指定哪個(gè)標(biāo)簽需要連接,(獲取tab.id的方法我試了很多,但只有下面這個(gè)有效,所以如果大家有什么其他有效的方法,求求求分享?。。?/p>

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {//獲取當(dāng)前Tab
    var cab = chrome.tabs.connect(tabId, {name: "BgToCon"});//建立通道,指定tabId,并命名
    cab.postMessage({ hello: "Cissy"});//利用通道發(fā)送一條消息。
}

接收消息
為了處理正在等待的連接,需要用chrome.extension.onConnect 事件監(jiān)聽器,對(duì)于content script或者擴(kuò)展頁(yè)面,這個(gè)方法都是一樣的

chrome.extension.onConnect.addListener(function(bac) {//監(jiān)聽是否連接,bac為Port對(duì)象
    bac.onMessage.addListener(function(msg) {//監(jiān)聽是否收到消息,msg為消息對(duì)象
        console.log(msg.hello);
    })
})

安裝調(diào)試

設(shè)置 —>拓展程序—>加載已解壓的拓展程序—>選擇文件就行了,記得要打開開發(fā)者模式哦

總結(jié)

插件功能的開發(fā)我就不寫了,實(shí)現(xiàn)起來(lái)比較簡(jiǎn)單,這篇文章就當(dāng)是chrome拓展開發(fā)的學(xué)習(xí)筆記了,不足之處還望指出,最后還是放一下插件源碼吧,寫的比較亂很多沒(méi)用到的代碼也沒(méi)刪掉,因?yàn)槭蔷毩?xí)中用到的。嗯嗯好了去吃飯。

參考資料:
官方文檔
360極速瀏覽器開發(fā)文檔
Chromium擴(kuò)展(Extension)機(jī)制簡(jiǎn)要介紹和學(xué)習(xí)計(jì)劃
Chrome插件開發(fā)入門(二)——消息傳遞機(jī)制

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/80422.html

相關(guān)文章

  • 一個(gè) Chrome 擴(kuò)展之 Flat Weibo —— 簡(jiǎn)潔你微博世界

    摘要:一般而言,擴(kuò)展會(huì)對(duì)用戶瀏覽的頁(yè)面進(jìn)行相應(yīng)的操作和一些數(shù)據(jù)傳遞,本案例的本質(zhì)是,當(dāng)用戶瀏覽網(wǎng)頁(yè)版微博時(shí),擴(kuò)展會(huì)向當(dāng)前頁(yè)面注入預(yù)先寫好的,這樣便對(duì)微博網(wǎng)頁(yè)版進(jìn)行了樣式重構(gòu)。采用這樣的方法依次處理所有你不想看到的元素,你的微博便會(huì)簡(jiǎn)潔很多。 0x00. 前言 微博現(xiàn)在也是變得越來(lái)越臃腫,廣告越來(lái)越多,早已不再是微博了,這讓微博深度用戶的我感到十分焦灼。由于之前就嘗試寫過(guò) Chrome 插件,...

    fredshare 評(píng)論0 收藏0
  • 阻止廣告:JavaScript實(shí)現(xiàn)Chrome插件實(shí)例分析

    摘要:以下示例將阻止所有對(duì)的請(qǐng)求。從存儲(chǔ)請(qǐng)求和阻止請(qǐng)求的對(duì)象中刪除當(dāng)前選項(xiàng)卡的屬性。收聽消息告知后臺(tái)進(jìn)程阻止的列表已被用戶更新。兩者都提供類似的功能和事件處理程序。 前言 當(dāng)我們?yōu)g覽網(wǎng)站時(shí),都會(huì)發(fā)送許多請(qǐng)求來(lái)獲取網(wǎng)頁(yè)內(nèi)容。這些請(qǐng)求中有些是重要的,而有些是我們不需要,因?yàn)樗鼈兛赡苁菑V告或建議等。在本文中,將創(chuàng)建一個(gè)有助于阻止和取消阻止所選URL的Chrome擴(kuò)展插件,讓你選擇你打開的網(wǎng)址及該打...

    Sike 評(píng)論0 收藏0
  • chrome覽器安裝網(wǎng)頁(yè)測(cè)試插件postman圖文步驟記錄

    摘要:今天給大家介紹的這款網(wǎng)頁(yè)調(diào)試工具不僅可以調(diào)試簡(jiǎn)單的腳本等簡(jiǎn)單的網(wǎng)頁(yè)基本信息,它還可以發(fā)送幾乎所有類型的請(qǐng)求在發(fā)送網(wǎng)絡(luò)請(qǐng)求方面可以說(shuō)是插件類產(chǎn)品中的代表產(chǎn)品之一。 用戶在開發(fā)或者調(diào)試網(wǎng)絡(luò)程序或者是網(wǎng)頁(yè)B/S模式的程序的時(shí)候是需要一些方法來(lái)跟蹤網(wǎng)頁(yè)請(qǐng)求的,用戶可以使用一些網(wǎng)絡(luò)的監(jiān)視工具比如著名的Firebug等網(wǎng)頁(yè)調(diào)試工具。今天給大家介紹的這款網(wǎng)頁(yè)調(diào)試工具不僅可以調(diào)試簡(jiǎn)單的css、html...

    coordinate35 評(píng)論0 收藏0
  • chrome擴(kuò)展開發(fā)之旅 第一篇

    摘要:擴(kuò)展及應(yīng)用介紹與區(qū)別介紹支持開發(fā)者為其編寫各種各樣的擴(kuò)展與應(yīng)用來(lái)擴(kuò)充其功能。用處安裝擴(kuò)展之后,就會(huì)讀取擴(kuò)展中的文件。結(jié)語(yǔ)以上就是第一章的總結(jié),接下來(lái)的筆記,敬請(qǐng)期待原書項(xiàng)目代碼下載擴(kuò)展及其應(yīng)用開發(fā) 讀書筆記介紹 寒假想自己做一個(gè)chrome擴(kuò)展,便從圖書館借了這本書。同時(shí),為了培養(yǎng)自己的好習(xí)慣,做沉淀,便讀一章寫一篇總結(jié),全書總共10章,將會(huì)分為10篇博文。歡迎大家多多指正,也希望大家...

    lei___ 評(píng)論0 收藏0
  • 面向Web設(shè)計(jì)和開發(fā)12款Chrome插件

    摘要:谷歌出品的瀏覽器是一個(gè)功能強(qiáng)大的現(xiàn)代瀏覽器,許多人都喜歡使用它。在這里,我們給大家?guī)?lái)應(yīng)用程序的另一個(gè)有趣的收集專注于網(wǎng)頁(yè)設(shè)計(jì)和開發(fā)的款最重要的擴(kuò)展程序。讓您從谷歌字體目錄中的字體選擇帶有幾個(gè)文本樣式選項(xiàng)的字體,并在當(dāng)前選項(xiàng)卡中預(yù)覽。 谷歌出品的Chrome 瀏覽器是一個(gè)功能強(qiáng)大的現(xiàn)代瀏覽器,許多人都喜歡使用它。在這里,我們給大家?guī)?lái) Chrome 應(yīng)用程序的另一個(gè)有趣的收集——專注于...

    妤鋒シ 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<