日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

vue+element開發一個谷歌插件的全過程

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

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

開始

1.本地創建文件夾testPlugin并新建manifest.json文件

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

2.添加插件的小icon

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

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

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

vue+element開發一個谷歌插件的全過程

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

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

testPlugin創建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>

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

vue+element開發一個谷歌插件的全過程

4.js事件(樣式同理)

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

html中:

<input placeholder='請輸入'/><input type='button' value='點擊'/><script src='http://m.b3g6.com/bcjs/js/index.js'></script>

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

vue+element開發一個谷歌插件的全過程

一個嵌入網頁中的懸浮框

上述例子是點擊icon瀏覽器右上角出現的小彈窗,

引入vue.js、element-ui

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

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,減少插件包的一點大小,當然也可以像引入index.js那樣在manifest.json中引入。

直接在index.js文件中寫Vue實例,不過首先得創建掛載實例的節點:

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} }})讓我們來寫一個簡易替換網頁背景顏色工具

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://m.b3g6.com/bcjs/css/index.css'></head><body> <div class='plugin'> <input type='button' value='打開' /> </div></body><script src='http://m.b3g6.com/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) }); })}

這樣一個小嘗試就完成了,當然如果有更多需求可以結合本地存儲或者服務端來協作。

總結

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

標簽: Vue
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
91精品国产调教在线观看 | 欧美激情视频一区二区三区在线播放| 都市激情国产精品| 亚洲精品免费观看| 五月精品视频| 美女国产精品久久久| 日韩制服丝袜av| 日韩在线短视频| 国产精品亚洲综合久久| 国产精品老牛| 亚洲午夜精品久久久久久app| 国产探花一区| 一区二区91| 日韩中文字幕麻豆| 丝袜美腿高跟呻吟高潮一区| 欧美日韩精品免费观看视完整 | 欧美sm一区| 日本免费在线视频不卡一不卡二| 久久精品动漫| 黄毛片在线观看| 成人亚洲一区| 日韩久久电影| 国产日韩电影| 激情婷婷欧美| 亚洲人妖在线| 国产欧美日本| 国内一区二区三区| 视频一区中文| 亚洲日本国产| 国产精品亚洲人成在99www| 日韩欧美中文字幕电影| 国产欧美日韩精品一区二区免费 | 国产精品一区二区精品| 青青青国产精品| 国产精品一区二区三区av麻| 在线视频免费在线观看一区二区| 中文欧美日韩| 国产日韩一区二区三免费高清| 国产成人久久精品麻豆二区| 99成人在线| 日韩综合一区二区| 欧美一区影院| 精品久久91| 在线精品福利| 国产成人77亚洲精品www| 亚洲免费精品| 久久精品国产免费| 亚洲激情国产| 色综合狠狠操| 日本久久一区| 免费视频一区三区| 国产探花在线精品一区二区| 久久精品国产99久久| 国产精品天堂蜜av在线播放| 国产精品av一区二区| 国产日韩欧美三级| 久久久久久黄| 高清av不卡| 精品国产亚洲日本| 中文字幕av亚洲精品一部二部 | 欧美亚洲网站| 久久中文字幕av| 精品黄色一级片| 国产精品一区二区av日韩在线| 欧美特黄一级| 亚洲1234区| 在线天堂中文资源最新版| 日韩影院精彩在线| 蜜桃精品在线| 丁香婷婷久久| 国产精品99一区二区三| 三级久久三级久久久| 69堂精品视频在线播放| 日韩一区二区三区免费播放| 9色国产精品| 麻豆精品视频在线观看视频| 久久麻豆精品| 国产精品va| 99视频在线精品国自产拍免费观看| 亚洲精品在线a| 国产成人精品一区二区三区在线| 欧美亚洲国产一区| 天堂av一区| 99精品美女| 欧美日本久久| 麻豆亚洲精品| 高清不卡亚洲| 久久精品一区二区不卡| 亚洲天堂资源| 激情91久久| 青草国产精品久久久久久| 欧美偷窥清纯综合图区| 美女视频黄久久| 激情黄产视频在线免费观看| 日韩中文首页| 亚洲综合电影一区二区三区| 免费在线观看一区二区三区| 国产精品腿扒开做爽爽爽挤奶网站| 免费日韩视频| 欧美中文一区| 国精品产品一区| 欧美91精品| 国产欧美一级| 日韩黄色在线观看| 日韩毛片视频| 亚洲精品九九| 日韩在线观看| 91亚洲精品在看在线观看高清| 国产精品欧美大片| 色婷婷久久久| 国产精品国码视频| 伊人精品在线| 久久精品一区| 天堂精品久久久久| 欧美精品激情| 国产高潮在线| 日韩高清不卡一区| 国产精品99免费看| 色综合五月天| 精品久久久网| 欧美国产不卡| 日韩精品欧美大片| 天堂成人国产精品一区| 91精品国产成人观看| av资源中文在线天堂| 91成人精品观看| 日韩精品成人在线观看| 136国产福利精品导航网址| 不卡专区在线| 啪啪国产精品| 色爱av综合网| 亚洲高清激情| 一区二区国产精品| 精品视频自拍| 亚洲欧美日韩国产综合精品二区| 国产精品红桃| 天海翼精品一区二区三区| 亚洲福利国产| 久久亚洲国产| 视频一区视频二区中文| 欧美日韩视频免费看| 久久丁香四色| 久久久久伊人| 亚洲毛片网站| 亚洲女人av| 999国产精品永久免费视频app| 亚洲天堂免费| 精品一区欧美| 亚洲天堂免费电影| 亚洲精品99| 精品三级av| 美女精品视频在线| 国产a亚洲精品| 91精品一区国产高清在线gif| 国产精品88久久久久久| 丝瓜av网站精品一区二区| 亚洲日本久久| 日韩精品乱码av一区二区| 国产精品流白浆在线观看| 精品一区av| 91精品精品| 日韩精品一区第一页| 国产精品久久国产愉拍| 高清一区二区三区av| 欧美日韩中文字幕一区二区三区| 国产精品普通话对白| 日本欧美大码aⅴ在线播放| 精品国产黄a∨片高清在线| 欧美日韩在线网站| 日韩精品a在线观看91| 成人国产精品久久| 亚洲免费影院| 久久免费影院| 久久精品影视| 日韩激情啪啪| 麻豆视频在线看| 麻豆亚洲精品| 精品国产91| 国产日韩专区| 麻豆国产欧美日韩综合精品二区| 亚洲天堂黄色| 日韩国产高清在线| 亚洲1234区| 青草久久视频| 国产99久久| 国产精品一区二区av日韩在线| 女人av一区| 久久av免费| 99成人在线| 久久香蕉网站| 亚洲日韩视频| 精品捆绑调教一区二区三区| 亚洲免费一区三区| 中文字幕在线官网| 日韩一区二区三区精品视频第3页| 日韩综合一区| 欧美一级久久| 在线综合亚洲| 天堂√中文最新版在线| 日韩精品第一|