欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報邀請碼778899分享:前端 my-plugin

柚子快報邀請碼778899分享:前端 my-plugin

http://yzkb.51969.com/

SwitchyOmega Proxy

功能:你懂的。

Hello World

manifest.json

Chrome 瀏覽器插件沒有嚴格的文件結(jié)構約束,只需要保證文件夾根目錄有 manifest.json 文件**,**該文件的內(nèi)容會概括插件所需的資源、權限等等。

一個段簡單的示例:

{

“manifest_version”:?2,?//?必填

“name”:?“my-plugin”,?//?必填

“version”:?“0.1.0”?//?必填

}

manifest_version:代表了manifest文件的版本,瀏覽器會根據(jù)這個值去指定該版本擁有的功能。

name:插件的名稱。

version:插件版本。

將manifest.json文件放到一個文件夾內(nèi)。

chrome://extensions/

在瀏覽器地址欄輸入chrome://extensions/打開“拓展程序”頁面。

注意:需要啟用右上角的 “開發(fā)者模式” 才能加載已解壓的插件文件:

加載已解壓的插件

啟用之后點擊加載已解壓的拓展程序,選擇剛剛我們放入了manifest.json的文件夾,之后你會看到:

新增了一個我們剛剛添加的插件,而且瀏覽器右上角也會有我們的一個圖標:

此時已經(jīng)加載了一個插件了,但是這個插件除了占用瀏覽器的一個位置除外,沒有任何作用。

如果沒有設置插件圖標,那么插件的第一個字符會成為插件的默認icon。

讓插件看起來更“插件”一點

為了讓這個插件更“完善”一點,我們給它加一個icon和描述,并且點擊出現(xiàn)一個popup頁面,popup 頁面一般用來承載臨時性的交互,且生命周期很短:單擊圖標打開popup,焦點離開又立即關閉,可以通過default_popup字段來定義。

{

“description”:?“這是一段描述”,

//?插件管理頁面的icon

“icons”:?{

“84”:?“./icon/ball.png”

},

//?瀏覽器右上角的圖標和內(nèi)容

“browser_action”:?{

“default_icon”:?“./icon/ball.png”,

“default_title”:?“我的插件”,

“default_popup”:?“./html/popup.html”

}

}

此時我們的目錄結(jié)構也變成了這樣:

給popup.html加上內(nèi)容:

my-plugin

hello?world!!

之后,我們點擊插件右下角的“刷新”按鈕:

你會發(fā)現(xiàn)插件有了icon和描述:

并且右上角的icon也變了,點擊一下,會彈出我們剛剛編寫的popup.html頁面:

現(xiàn)在,我們一個“完整”的插件就已經(jīng)做好了。

manifest.json 配置介紹

background

{

“background”:?{

//?提供一個頁面給background

“page”:?“./html/background.html”

//?或者若干個js文件,后臺會默認生成一個空白的html

“scripts”:?[“./js/background.js”]

}

}

background配置項,為插件的后臺常駐頁面,生命周期隨著瀏覽器的生命周期一樣,瀏覽器一啟動,后臺頁面就會開始運行,直到瀏覽器被關閉;或者在插件管理頁面,將該插件禁用了,后臺頁面也會停止運行。

另外,background擁有的權限比較高,幾乎可以調(diào)用所有的Chrome擴展API(除了devtools),同時擁有直接跨域的能力。

page:指定一個網(wǎng)頁為后臺頁面。

scripts:指定若干個js文件,后臺會自動生成一個html,并按順序調(diào)用這些js文件。

注意:page 和 scripts 選項只能二選一,不然會報錯。

配置好之后,屬性插件,會出現(xiàn)一個背景頁選項:

我使用的是一個background.js文件:

function?_back()?{

console.log(‘background.js’)

}

console.log(‘running…’)

點進去看看里面裝的什么玩意:

沒錯,是一個普通的后臺頁面,如果background.js和其他頁面有通信,則可以在這里進行查看請求或者調(diào)試代碼。

如果使用page選項,打開也是這個樣子。

另外:由于background是一直在后臺運行的,為了優(yōu)化性能,可以增加一個配置:

{

“background”:?{

“persistent”:?false

}

}

這樣,插件就會在被需要時加載,在空閑時被關閉。比如安裝、更新插件的時候,或者有其他頁面與background通信的時候才會被加載。

content-scripts

content-scripts能夠在合適的時機(頁面載入前、載入后、空閑時)注入腳本,允許內(nèi)容腳本更改其JavaScript環(huán)境,而不與頁面或其他內(nèi)容腳本發(fā)生沖突。

例如,原頁面有個按鈕,并且給按鈕添加了一個點擊事件:

click?me

在content-scripts中,加入以下代碼:

var?greeting?=?"hola,?";

var?button?=?document.getElementById(“mybutton”);

button.person_name?=?“Roberto”;

button.addEventListener(“click”,?function()?{

alert(greeting?+?button.person_name?+?“.”);

},?false);

當頁面運行之后,腳本內(nèi)容也會在插件定義的時間運行,當頁面點擊按鈕時,會出現(xiàn)兩次彈窗。

content-scripts配置:

{

“content_scripts”:?[

{

//?在匹配的URL中運行,表示所有的URL都會運行。

“matches”:?[“”],

//?注入的js,會按順序運行。

“js”:?[“./js/content.js”],

//?css引入需謹慎,因為可能會影響全局的樣式,同樣也能接收多個css文件,會按順序插入到頁面中

“css”:?[“./css/style.css”],

//?代碼注入的時機,可選值:?“document_start”,?“document_end”,?or?“document_idle”,最后一個表示頁面空閑時,默認document_idle

“run_at”:?“document_start”

},

{

“matches”:?[“https://www.baidu.com/”],

“js”:?[“./js/other.js”],

“run_at”:?“document_start”

}

],

}

content.js代碼如下:

console.log(‘hello,?from?content.js’);

other.js代碼如下:

console.log(‘hello,?from?other.js…’)

更新插件,當在 https://bytedance.feishu.cn/drive/home/運行時:

因為【 https://bytedance.feishu.cn/drive/home/】只匹配到了的規(guī)則,所以之后運行content.js

當在https://www.baidu.com/運行時:

同時命中了2個規(guī)則,所以content.js和other.js都會運行,順序也是正確的。

content-scripts 和原始頁面共享DOM,但是不共享JS,如要訪問頁面JS(例如某個JS變量),只能通過inject-scripts來實現(xiàn)。content-scripts能夠訪問的Chrome API的權限也比較低,只能訪問以下四個API:

chrome.extension(getURL , inIncognitoContext , lastError , onRequest , sendRequest) chrome.i18n chrome.runtime(connect , getManifest , getURL , id , onConnect , onMessage , sendMessage) chrome.storage

Inject-scripts

inject-scripts 是通過DOM操作插入的JS代碼,通常在content-scripts只能操作DOM,但是卻無法訪問頁面的JS,借助content-scripts可以操作DOM的能力,往頁面中插入JS文件,給頁面提供調(diào)用插件API的能力,以及和background通信的能力。

在插入之前,需配置一下web可訪問的資源,同時content-scripts的調(diào)用時機換成"document_end"或者"document_idle",不然會無法獲取DOM,導致插入失敗。在manifest.json中添加以下內(nèi)容:

{

“content_scripts”:?[

{

“matches”:?[“”],

“js”:?[“./js/content.js”],

“run_at”:?“document_end”

},

],

“web_accessible_resources”:?[“js/inject.js”],

}

inject.js的內(nèi)容如下:

function?mockApi?()?{

console.log(‘this?is?from?inject.js’)

}

content.js增加以下代碼:

(function?()?{

let?path?=?‘js/inject.js’;

let?script?=?document.createElement(‘script’);

script.setAttribute(‘type’,?‘text/javascript’);

//?注意,路徑需用Chrome API 生成,這個方法可以獲得插件的資源的真實路徑。

//?類似:chrome-extension://ihcokhadfjfchaeagdoclpnjdiokfakg/js/inject.js

script.src?=?chrome.extension.getURL(path);

script.onload?=?function?()?{

//?在執(zhí)行完代碼之后移除script標簽

this.parentNode.removeChild(this);

}

document.body.appendChild(script);

})();

更新插件后,頁面就可以訪問inject.js的方法:

permissions

插件后臺有的操作需要配置相應的權限,例如本地存儲、網(wǎng)絡請求、通知等等,示例:

{

“permissions”:?[

“contextMenus”,?//?右鍵菜單

“tabs”,?//?標簽

“notifications”,?//?通知

“webRequest”,?//?web請求

“webRequestBlocking”,

“storage”?//?插件本地存儲

],

}

完整的manifest配置

官方文檔:https://developer.chrome.com/extensions/manifest

通信

popup和background通信

popup可以通過 chrome.extension.getBackgroundPage() API 直接獲取到background的上下文,從而調(diào)用background的方法來通信:

//?popup.js

var?backend?=?chrome.extension.getBackgroundPage();

backend.test();?//?訪問bbackground的函數(shù)

background可以通過chrome.extension.getViews({type:‘popup’}) 獲取到popup的上下文,前提是popup頁面是打開的狀態(tài)下。

let?views?=?chrome.extension.getViews({type:‘popup’});

let?popup?=?null

if(views.length?>?0)?{

popup?=?views[0];

//?直接訪問popup的函數(shù)

popup.test();

}

這里需要注意一點:

在popup頁面,你如果想編寫js,請將js編寫在一個文件里面,然后引入進來,不然會報錯,這是因為Chrome的安全政策規(guī)定的:https://developer.chrome.com/extensions/contentSecurityPolicy

popup錯誤示范:

hello?world!!

正確姿勢:

hello?world!!

content-scripts和background通信

content-scripts可以通過 chrome.runtime.sendMessage(message) 給background發(fā)送消息:

chrome.runtime.sendMessage(‘message?content’,?(res)?=>?{

console.log(‘from?background:’,?res)

});

background通過chrome.runtime.onMessage.addListener()監(jiān)聽content-scripts發(fā)送的消息:

chrome.runtime.onMessage.addListener(function(message,?sender,?callback)?{

console.log(mesasge);?//?meesage?content

callback?&&?callback(‘yes?this?from?background’)

});

background主動給content-scripts發(fā)消息,首先得查找要給哪個tab發(fā)消息,使用chrome.tabs.query 這個方法查找到tab,再使用chrome.tabs.sendMessage 方法給tab發(fā)消息:

//?{active:?true,?currentWindow:?true}?表示查找當前屏幕下的active狀態(tài)的tab;

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

chrome.tabs.sendMessage(tabs[0].id,?‘message?content’,?(res)?=>?{ 自我介紹一下,小編13年上海交大畢業(yè),曾經(jīng)在小公司待過,也去過華為、OPPO等大廠,18年進入阿里一直到現(xiàn)在。

深知大多數(shù)前端工程師,想要提升技能,往往是自己摸索成長或者是報班學習,但對于培訓機構動則幾千的學費,著實壓力不小。自己不成體系的自學效果低效又漫長,而且極易碰到天花板技術停滯不前!

因此收集整理了一份《2024年Web前端開發(fā)全套學習資料》,初衷也很簡單,就是希望能夠幫助到想自學提升又不知道該從何學起的朋友,同時減輕大家的負擔。

既有適合小白學習的零基礎資料,也有適合3年以上經(jīng)驗的小伙伴深入學習提升的進階課程,基本涵蓋了95%以上前端開發(fā)知識點,真正體系化!

由于文件比較大,這里只是將部分目錄截圖出來,每個節(jié)點里面都包含大廠面經(jīng)、學習筆記、源碼講義、實戰(zhàn)項目、講解視頻,并且會持續(xù)更新!

如果你覺得這些內(nèi)容對你有幫助,可以掃碼獲?。。。▊渥ⅲ呵岸耍?/p>

最后

本人分享一下這次字節(jié)跳動、美團、頭條等大廠的面試真題涉及到的知識點,以及我個人的學習方法、學習路線等,當然也整理了一些學習文檔資料出來是附贈給大家的。知識點涉及比較全面,包括但不限于前端基礎,HTML,CSS,JavaScript,Vue,ES6,HTTP,瀏覽器,算法等等

詳細大廠面試題答案、學習筆記、學習視頻等資料領取,點擊資料領取直通車免費領取!

前端視頻資料: .id,?‘message?content’,?(res)?=>?{ 自我介紹一下,小編13年上海交大畢業(yè),曾經(jīng)在小公司待過,也去過華為、OPPO等大廠,18年進入阿里一直到現(xiàn)在。

深知大多數(shù)前端工程師,想要提升技能,往往是自己摸索成長或者是報班學習,但對于培訓機構動則幾千的學費,著實壓力不小。自己不成體系的自學效果低效又漫長,而且極易碰到天花板技術停滯不前!

因此收集整理了一份《2024年Web前端開發(fā)全套學習資料》,初衷也很簡單,就是希望能夠幫助到想自學提升又不知道該從何學起的朋友,同時減輕大家的負擔。

[外鏈圖片轉(zhuǎn)存中…(img-wmCeYOYx-1713726516544)]

[外鏈圖片轉(zhuǎn)存中…(img-uNsNX2CW-1713726516545)]

既有適合小白學習的零基礎資料,也有適合3年以上經(jīng)驗的小伙伴深入學習提升的進階課程,基本涵蓋了95%以上前端開發(fā)知識點,真正體系化!

[外鏈圖片轉(zhuǎn)存中…(img-khzyKR4x-1713726516545)]

由于文件比較大,這里只是將部分目錄截圖出來,每個節(jié)點里面都包含大廠面經(jīng)、學習筆記、源碼講義、實戰(zhàn)項目、講解視頻,并且會持續(xù)更新!

如果你覺得這些內(nèi)容對你有幫助,可以掃碼獲?。。。▊渥ⅲ呵岸耍?/p>

[外鏈圖片轉(zhuǎn)存中…(img-UXtow0KR-1713726516545)]

最后

本人分享一下這次字節(jié)跳動、美團、頭條等大廠的面試真題涉及到的知識點,以及我個人的學習方法、學習路線等,當然也整理了一些學習文檔資料出來是附贈給大家的。知識點涉及比較全面,包括但不限于前端基礎,HTML,CSS,JavaScript,Vue,ES6,HTTP,瀏覽器,算法等等

詳細大廠面試題答案、學習筆記、學習視頻等資料領取,點擊資料領取直通車免費領??!

[外鏈圖片轉(zhuǎn)存中…(img-pFD9mf6g-1713726516546)]

前端視頻資料:

柚子快報邀請碼778899分享:前端 my-plugin

http://yzkb.51969.com/

精彩文章

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。

轉(zhuǎn)載請注明,如有侵權,聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19532388.html

發(fā)布評論

您暫未設置收款碼

請在主題配置——文章設置里上傳

掃描二維碼手機訪問

文章目錄