电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

vue+element開發(fā)一個谷歌插件的全過程

瀏覽:3日期:2022-09-30 08:59:26

簡單功能:點(diǎn)擊瀏覽器右上角插件icon彈出小彈窗,點(diǎn)擊設(shè)置彈出設(shè)置頁,并替換背景圖或顏色。

開始

1.本地創(chuàng)建文件夾testPlugin并新建manifest.json文件

{ 'name': 'testPlugin', 'description': '這是一個測試用例', 'version': '0.0.1', 'manifest_version': 2}

2.添加插件的小icon

testPlugin下創(chuàng)建icons文件夾,可以放入一些不同尺寸的icon,測試可以偷懶都放一種尺寸的icon。修改manifest.json為:

{ 'name': 'testPlugin', 'description': '這是一個測試用例', 'version': '0.0.1', 'manifest_version': 2, 'icons': { '16': 'icons/16.png', '48': 'icons/16.png' }}

這時候在擴(kuò)展程序中加載已解壓的程序(就是我們創(chuàng)建的文件夾),就可以看到雛形了:

vue+element開發(fā)一個谷歌插件的全過程

3.選擇性地添加點(diǎn)擊插件icon瀏覽器右上角彈出來的框

'browser_action': { 'default_title': 'test plugin', 'default_icon': 'icons/16.png', 'default_popup': 'index.html'}

testPlugin創(chuàng)建index.html文件:

<!DOCTYPE html><html lang='en'><head> <meta charset='UTF-8'> <meta name='viewport' content='width=device-width, initial-scale=1.0'> <title>test plugin</title></head><body> <input placeholder='請輸入'/></body></html>

刷新插件,這時候點(diǎn)擊瀏覽器中剛剛添加的插件的icon,就會彈出:

vue+element開發(fā)一個谷歌插件的全過程

4.js事件(樣式同理)

document.getElementById(’button’).onclick = function() { alert(document.getElementById(’name’).value)}

html中:

<input placeholder='請輸入'/><input type='button' value='點(diǎn)擊'/><script src='http://www.hdgsjgj.cn/bcjs/js/index.js'></script>

刷新插件,這時候點(diǎn)擊瀏覽器中剛剛添加的插件的icon,就會彈出輸入框中的值:

vue+element開發(fā)一個谷歌插件的全過程

一個嵌入網(wǎng)頁中的懸浮框

上述例子是點(diǎn)擊icon瀏覽器右上角出現(xiàn)的小彈窗,

引入vue.js、element-ui

下載合適版本的vue.js和element-ui等插件,同樣按照index.js一樣的操作引入,如果沒有下載單獨(dú)js文件的地址,可以打開cdn地址直接將壓縮后的代碼復(fù)制。

manifest.json中添加:

'content_scripts': [ { 'matches': ['<all_urls>' ], 'css': ['css/index.css' ], 'js': ['js/vue.js','js/element.js','js/index.js' ], 'run_at': 'document_idle' } ],

在index.js文件:

這里使用在head里插入link 的方式引入element-ui的css,減少插件包的一點(diǎn)大小,當(dāng)然也可以像引入index.js那樣在manifest.json中引入。

直接在index.js文件中寫Vue實例,不過首先得創(chuàng)建掛載實例的節(jié)點(diǎn):

let element = document.createElement(’div’)let attr = document.createAttribute(’id’)attr.value = ’appPlugin’element.setAttributeNode(attr)document.getElementsByTagName(’body’)[0].appendChild(element)let link = document.createElement(’link’)let linkAttr = document.createAttribute(’rel’)linkAttr.value = ’stylesheet’let linkHref = document.createAttribute(’href’)linkHref.value = ’https://unpkg.com/element-ui/lib/theme-chalk/index.css’link.setAttributeNode(linkAttr)link.setAttributeNode(linkHref)document.getElementsByTagName(’head’)[0].appendChild(link)const vue = new Vue({ el: ’#appPlugin’, template:` <div class='app-plugin-content'>{{text}}{{icon_post_message}}<el-button @click='Button'>Button</el-button></div> `, data: function () {return { text: ’hhhhhh’, icon_post_message: ’_icon_post_message’, isOcContentPopShow: true } }, mounted() {console.log(this.text) }, methods: {Button() { this.isOcContentPopShow = false} }})讓我們來寫一個簡易替換網(wǎng)頁背景顏色工具

index.js:

let element = document.createElement(’div’)let attr = document.createAttribute(’id’)attr.value = ’appPlugin’element.setAttributeNode(attr)document.getElementsByTagName(’body’)[0].appendChild(element)let link = document.createElement(’link’)let linkAttr = document.createAttribute(’rel’)linkAttr.value = ’stylesheet’let linkHref = document.createAttribute(’href’)linkHref.value = ’https://unpkg.com/element-ui/lib/theme-chalk/index.css’link.setAttributeNode(linkAttr)link.setAttributeNode(linkHref)document.getElementsByTagName(’head’)[0].appendChild(link)const vue = new Vue({ el: ’#appPlugin’, template: `<div v-if='isOcContentPopShow' id='oc_content_page'> <div id='oc_content_title'>顏色 <el-button type='text' icon='el-icon-close' @click='close'></el-button></div> <div class='app-plugin-content'>背景:<el-color-picker v-model='color1'></el-color-picker></div> <div class='app-plugin-content'>字體:<el-color-picker v-model='color2'></el-color-picker></div></div> `, data: function () {return { color1: null, color2: null, documentArr: [], textArr: [], isOcContentPopShow: true } }, watch: {color1(val) { let out = document.getElementById(’oc_content_page’) let outC = document.getElementsByClassName(’el-color-picker__panel’) this.documentArr.forEach(item => { if(!out.contains(item) && !outC[0].contains(item) && !outC[1].contains(item)) {item.style.cssText = `background-color: ${val}!important;color: ${this.color2}!important;` } })},color2(val) { let out = document.getElementById(’oc_content_page’) let outC = document.getElementsByClassName(’el-color-picker__panel’)[1] this.textArr.forEach(item => {if(!out.contains(item) && !outC.contains(item)) {item.style.cssText = `color: ${val}!important;` } })} }, mounted() {chrome.runtime.onConnect.addListener((res) => { if (res.name === ’testPlugin’) {res.onMessage.addListener(mess => { this.isOcContentPopShow = mess.isShow}) }})this.$nextTick(() => { let bodys = [...document.getElementsByTagName(’body’)] let headers = [...document.getElementsByTagName(’header’)] let divs = [...document.getElementsByTagName(’div’)] let lis = [...document.getElementsByTagName(’li’)] let articles = [...document.getElementsByTagName(’article’)] let asides = [...document.getElementsByTagName(’aside’)] let footers = [...document.getElementsByTagName(’footer’)] let navs = [...document.getElementsByTagName(’nav’)] this.documentArr = bodys.concat(headers, divs, lis, articles, asides, footers, navs) let as = [...document.getElementsByTagName(’a’)] let ps = [...document.getElementsByTagName(’p’)] this.textArr = as.concat(ps)}) }, methods: {close() { this.isOcContentPopShow = false} }})

index.html:

<!DOCTYPE html><html lang='en'><head> <meta charset='UTF-8'> <meta name='viewport' content='width=device-width, initial-scale=1.0'> <title>my plugin</title> <link rel='stylesheet' href='http://www.hdgsjgj.cn/bcjs/css/index.css'></head><body> <div class='plugin'> <input type='button' value='打開' /> </div></body><script src='http://www.hdgsjgj.cn/bcjs/js/icon.js'></script></html>

新建icon.js:

plugin_button.onclick = function () { mess()}async function mess () { const tabId = await getCurrentTabId() const connect = chrome.tabs.connect(tabId, {name: ’testPlugin’}); connect.postMessage({isShow: true})}function getCurrentTabId() { return new Promise((resolve, reject) => { chrome.tabs.query({ active: true, currentWindow: true }, function (tabs) { resolve(tabs.length ? tabs[0].id : null) }); })}

這樣一個小嘗試就完成了,當(dāng)然如果有更多需求可以結(jié)合本地存儲或者服務(wù)端來協(xié)作。

總結(jié)

到此這篇關(guān)于vue+element開發(fā)一個谷歌插件的文章就介紹到這了,更多相關(guān)vue+element開發(fā)插件內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Vue
相關(guān)文章:
主站蜘蛛池模板: 自进式锚杆-自钻式中空注浆锚杆-洛阳恒诺锚固锚杆生产厂家 | 臭氧实验装置_实验室臭氧发生器-北京同林臭氧装置网 | 聚氨酯保温钢管_聚氨酯直埋保温管道_聚氨酯发泡保温管厂家-沧州万荣防腐保温管道有限公司 | 泵阀展|阀门展|水泵展|流体机械展 -2025上海国际泵管阀展览会flowtech china | 刺绳_刀片刺网_刺丝滚笼_不锈钢刺绳生产厂家_安平县浩荣金属丝网制品有限公司-安平县浩荣金属丝网制品有限公司 | 合肥抖音SEO网站优化-网站建设-网络推广营销公司-百度爱采购-安徽企匠科技 | 酒精检测棒,数显温湿度计,酒安酒精测试仪,酒精检测仪,呼气式酒精检测仪-郑州欧诺仪器有限公司 | AR开发公司_AR增强现实_AR工业_AR巡检|上海集英科技 | 北京森语科技有限公司-模型制作专家-展览展示-沙盘模型设计制作-多媒体模型软硬件开发-三维地理信息交互沙盘 | 阴离子_阳离子聚丙烯酰胺厂家_聚合氯化铝价格_水处理絮凝剂_巩义市江源净水材料有限公司 | 亳州网络公司 - 亳州网站制作 - 亳州网站建设 - 亳州易天科技 | 北京晚会活动策划|北京节目录制后期剪辑|北京演播厅出租租赁-北京龙视星光文化传媒有限公司 | 亚克力制品定制,上海嘉定有机玻璃加工制作生产厂家—官网 | 南京雕塑制作厂家-不锈钢雕塑制作-玻璃钢雕塑制作-先登雕塑厂 | 纸布|钩编布|钩针布|纸草布-莱州佳源工艺纸布厂 | 偏心半球阀-电动偏心半球阀-调流调压阀-旋球阀-上欧阀门有限公司 | 数显恒温培养摇床-卧式/台式恒温培养摇床|朗越仪器 | 蔬菜清洗机_环速洗菜机_异物去除清洗机_蔬菜清洗机_商用洗菜机 - 环速科技有限公司 | 山西3A认证|太原AAA信用认证|投标AAA信用证书-山西AAA企业信用评级网 | 奥运星-汽车性能网评-提供个性化汽车资讯 | 消泡剂_水处理消泡剂_切削液消泡剂_涂料消泡剂_有机硅消泡剂_广州中万新材料生产厂家 | 橡胶电子拉力机-塑料-微电脑电子拉力试验机厂家-江苏天源 | 高低温试验房-深圳高低温湿热箱-小型高低温冲击试验箱-爱佩试验设备 | 单锥双螺旋混合机_双螺旋锥形混合机-无锡新洋设备科技有限公司 | 浙江栓钉_焊钉_剪力钉厂家批发_杭州八建五金制造有限公司 | 屏蔽服(500kv-超高压-特高压-电磁)-徐吉电气 | 陕西安玻璃自动感应门-自动重叠门-磁悬浮平开门厂家【捷申达门业】 | 化妆品加工厂-化妆品加工-化妆品代加工-面膜加工-广东欧泉生化科技有限公司 | 缠膜机|缠绕包装机|无纺布包装机-济南达伦特机械设备有限公司 | 右手官网|右手工业设计|外观设计公司|工业设计公司|产品创新设计|医疗产品结构设计|EMC产品结构设计 | 公交驾校-北京公交驾校欢迎您!| 微型气象仪_气象传感器_防爆气象传感器-天合传感器大全 | 【铜排折弯机,钢丝折弯成型机,汽车发泡钢丝折弯机,线材折弯机厂家,线材成型机,铁线折弯机】贝朗折弯机厂家_东莞市贝朗自动化设备有限公司 | 北京发电机出租_发电机租赁_北京发电机维修 - 河北腾伦发电机出租 | SRRC认证|CCC认证|CTA申请_IMEI|MAC地址注册-英利检测 | 超声波破碎仪-均质乳化机(供应杭州,上海,北京,广州,深圳,成都等地)-上海沪析实业有限公司 | 精益专家 - 设备管理软件|HSE管理系统|设备管理系统|EHS安全管理系统 | 砖机托板价格|免烧砖托板|空心砖托板厂家_山东宏升砖机托板厂 | 合肥白癜风医院_[治疗白癜风]哪家好_合肥北大白癜风医院 | 吊篮式|移动式冷热冲击试验箱-二槽冷热冲击试验箱-广东科宝 | ALC墙板_ALC轻质隔墙板_隔音防火墙板_轻质隔墙材料-湖北博悦佳 |