摘要:的交互邏輯是這樣的用戶點(diǎn)擊的圖標(biāo),會(huì)向頁(yè)面見上一篇文章谷歌插件開發(fā)之發(fā)送收集圖片事件,頁(yè)面收集完圖片后,將對(duì)應(yīng)的圖片地址數(shù)組發(fā)送給頁(yè)處理。頁(yè)就是點(diǎn)擊谷歌插件圖標(biāo)所彈出來(lái)的頁(yè)面。
Image downloader的交互邏輯是這樣的:用戶點(diǎn)擊Image downloader的圖標(biāo),會(huì)向頁(yè)面(content script,見上一篇文章:谷歌插件Image downloader開發(fā)之 content script)發(fā)送收集圖片事件,頁(yè)面收集完圖片后,將對(duì)應(yīng)的圖片地址數(shù)組發(fā)送給popup頁(yè)處理。popup頁(yè)就是點(diǎn)擊谷歌插件圖標(biāo)所彈出來(lái)的頁(yè)面。Image downloader的popup頁(yè)是長(zhǎng)成這樣的:
popup頁(yè)包含的功能popup頁(yè)采用了vue1.0來(lái)做數(shù)據(jù)綁定,主要包含了以下功能:
1、顯示原始圖片大小
2、根據(jù)圖片大小篩選圖片
3、設(shè)置是否顯示img標(biāo)簽的圖片、是否顯示背景圖片,是否顯示自定義屬性的圖片
4、根據(jù)自定義屬性規(guī)則,收集所配置的自定義屬性的值
5、下載圖片
圖片容器:
imgs: { // 圖片容器 attrImg: [], // 屬性圖 bgImg: [], // 背景圖 img: [], // img標(biāo)簽圖 }, /** * 向tab發(fā)送收集圖片信息,接收tab返回的圖片url列表 * @param action {string} 值為"all"或"attr",如果為all,則收集所有圖片,為attr則只收集屬性圖 * @param attr {string} 用;分隔開的屬性規(guī)則 */ sendMessage(action, attr) { chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => { chrome.tabs.sendMessage(tabs[0].id, { action, attr }, (response) => { if (action === "all") { const attrImg = response.attrImg const bgImg = response.bgImg const img = response.img // 重置容器 this.resetImgContainer("attrImg") this.resetImgContainer("bgImg") this.resetImgContainer("img") // 獲取圖片的寬高 this.mapImg(this.imgs.attrImg, attrImg) this.mapImg(this.imgs.bgImg, bgImg) this.mapImg(this.imgs.img, img) } else { this.resetImgContainer("attrImg") this.mapImg(this.imgs.attrImg, response.attrImg) } }); }); },
popup頁(yè)用了chrome的tabs的api,query查詢當(dāng)前頁(yè)簽,并用sendMessage向頁(yè)簽發(fā)送action和配置的屬性值,如果action為"all"則是收集所有圖片,如果為"attr",則只收集所配置的屬性圖片,resetImgContainer方法只是簡(jiǎn)單地將容器置空,response是content script所返回的結(jié)果,mapImg方法用來(lái)獲取圖片的長(zhǎng)和寬,下文會(huì)講到。
而在content script中,則用onMessage來(lái)接收popup的信息,并將收集到的圖片數(shù)組返回給popup
// 接收popup的指令,如果action為all,則獲取所有圖片url,如果為attr,則獲取屬性圖片 chrome.runtime.onMessage.addListener(({ action, attr }, sender, sendResponse) => { if (attr) { configAttr = [] configAttr.push(...initAttr) configAttr.push(...attr.split(",")) } else { configAttr = [] configAttr.push(...initAttr) } if (action === "all") { sendResponse({ attrImg: [...new Set(getConfigAttrUrl())], bgImg: [...new Set(getBackgroundImage())], img: [...new Set(getImgUrl())] }) } if (action === "attr") { sendResponse({ attrImg: [...new Set(getConfigAttrUrl())], }) } });
上篇文章發(fā)在div.io上時(shí),@幾米 提到了圖片去重的問(wèn)題,所有在返回圖片是,用es6的Set方法去重,這個(gè)只處理同類型圖片的去重,不處理如背景圖片和圖片標(biāo)簽之間的重復(fù)圖片。
獲取屬性圖片/** * 獲取屬性圖片 */ getAttrImg() { clearTimeout(this.progress) this.progress = setTimeout(() => { this.sendMessage("attr", this.attr) }, 500) },
配置的屬性值發(fā)生變化時(shí),向頁(yè)面發(fā)送獲取屬性圖片事件
顯示圖片原始大小/** * 遍歷圖片,設(shè)置圖片的寬高屬性 * @param container {array} 容器 * @param imgs {array} 圖片url列表 */ mapImg(container, imgs) { imgs.forEach((src) => { this.imgNatureSize(container, src) }) }, /** * 獲取圖片原始寬高,并將圖片push進(jìn)容器 * @param container {array} 容器 * @param src {string} 圖片url */ imgNatureSize(container, src) { const size = { width: "", height: "", } let image = new Image() image.src = src image.onload = function() { container.push({ src, width: image.width, height: image.height, }) } },
遍歷拿到的圖片,獲取圖片的寬和高,并將寬高屬性保存起來(lái)
下載圖片/** * 下載圖片 */ downLoad(url) { chrome.downloads.download({ url }, () => { console.log("下載成功") }) }
調(diào)用谷歌插件的download方法來(lái)進(jìn)行圖片下載,本來(lái)想搞個(gè)批量下載的,但是沒(méi)有發(fā)現(xiàn)谷歌插件有提供批量下載的API,如果遍歷所選中的圖片列表,不斷調(diào)用download方法,會(huì)一下子彈出很多保存窗口,沒(méi)有什么意義,就作罷了。
最后,所有文章都會(huì)同步發(fā)送到微信公眾號(hào)上,歡迎關(guān)注,歡迎提意見:
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/91334.html
摘要:地址功能有下面幾個(gè)功能收集所有的標(biāo)簽的圖片鏈接收集所有的背景圖片鏈接可以根據(jù)定義的規(guī)則,收集標(biāo)簽屬性中的鏈接支持圖片大小篩選顯示圖片的原始大小預(yù)覽插件用到谷歌插件中的和。 自己運(yùn)營(yíng)了一個(gè)公眾號(hào),在發(fā)文章的時(shí)候,需要在網(wǎng)上找一些圖,而有些網(wǎng)站的圖片可能隱藏在屬性或者背景圖中,要下載的時(shí)候經(jīng)常審查元素,查看源碼,不太方便,最近在看一些谷歌插件的api,便順手做了一個(gè)插件Image down...
摘要:小結(jié)本文只是簡(jiǎn)單分享了如何開發(fā)一個(gè)簡(jiǎn)單的谷歌瀏覽器插件,以及一些注意事項(xiàng),并且提到了如何授權(quán)和使用谷歌插件,重點(diǎn)介紹了插件開發(fā)必備的入口文件和插件中幾個(gè)重要環(huán)境以及環(huán)境之間的通信。 我們?cè)谏暇W(wǎng)的時(shí)候,都會(huì)用到瀏覽器,但是瀏覽器并非擁有我們想要的所有功能,我們可以根據(jù)自己的需要,實(shí)現(xiàn)自己的插件來(lái)滿足需求。比如網(wǎng)頁(yè)中經(jīng)常會(huì)有大量的廣告,如果你希望擁有一個(gè)純凈的網(wǎng)頁(yè),可以實(shí)現(xiàn)一個(gè)插件來(lái)刪除網(wǎng)...
摘要:小結(jié)本文只是簡(jiǎn)單分享了如何開發(fā)一個(gè)簡(jiǎn)單的谷歌瀏覽器插件,以及一些注意事項(xiàng),并且提到了如何授權(quán)和使用谷歌插件,重點(diǎn)介紹了插件開發(fā)必備的入口文件和插件中幾個(gè)重要環(huán)境以及環(huán)境之間的通信。 我們?cè)谏暇W(wǎng)的時(shí)候,都會(huì)用到瀏覽器,但是瀏覽器并非擁有我們想要的所有功能,我們可以根據(jù)自己的需要,實(shí)現(xiàn)自己的插件來(lái)滿足需求。比如網(wǎng)頁(yè)中經(jīng)常會(huì)有大量的廣告,如果你希望擁有一個(gè)純凈的網(wǎng)頁(yè),可以實(shí)現(xiàn)一個(gè)插件來(lái)刪除網(wǎng)...
摘要:小結(jié)本文只是簡(jiǎn)單分享了如何開發(fā)一個(gè)簡(jiǎn)單的谷歌瀏覽器插件,以及一些注意事項(xiàng),并且提到了如何授權(quán)和使用谷歌插件,重點(diǎn)介紹了插件開發(fā)必備的入口文件和插件中幾個(gè)重要環(huán)境以及環(huán)境之間的通信。 我們?cè)谏暇W(wǎng)的時(shí)候,都會(huì)用到瀏覽器,但是瀏覽器并非擁有我們想要的所有功能,我們可以根據(jù)自己的需要,實(shí)現(xiàn)自己的插件來(lái)滿足需求。比如網(wǎng)頁(yè)中經(jīng)常會(huì)有大量的廣告,如果你希望擁有一個(gè)純凈的網(wǎng)頁(yè),可以實(shí)現(xiàn)一個(gè)插件來(lái)刪除網(wǎng)...
摘要:之所以越來(lái)越好用,很大一部分原因歸功于功能豐富的插件對(duì)于忠實(shí)用戶來(lái)說(shuō),了解和開發(fā)一款適合自己的插件,確實(shí)是一件很的事情。 chrome 之所以越來(lái)越好用,很大一部分原因歸功于功能豐富的插件;對(duì)于chrome忠實(shí)用戶來(lái)說(shuō),了解和開發(fā)一款適合自己的chrome插件,確實(shí)是一件很cool的事情。 了解chrome 插件 chrome 插件個(gè)人理解:就是一個(gè)html + js +css + i...
閱讀 1238·2021-11-23 09:51
閱讀 685·2021-11-19 09:40
閱讀 1349·2021-10-11 10:58
閱讀 2358·2021-09-30 09:47
閱讀 3734·2021-09-22 15:55
閱讀 2168·2021-09-03 10:49
閱讀 1262·2021-09-03 10:33
閱讀 704·2019-08-29 17:12