From c695cf1d2a8c3bfc856a046e1bb08ceea3cd4b61 Mon Sep 17 00:00:00 2001 From: fanxb Date: Tue, 26 Nov 2019 00:02:30 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20Feat:=20[chrome]:=E5=AE=8C=E6=88=90?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E5=90=91=E6=8B=93=E5=B1=95=E4=BC=A0=E9=80=92?= =?UTF-8?q?=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 浏览器插件/bookmark-chrome/.editorConfig | 8 +++ 浏览器插件/bookmark-chrome/package.json | 1 + .../bookmark-chrome/scripts/build-zip.js | 20 ++++---- 浏览器插件/bookmark-chrome/src/background.js | 13 ++++- 浏览器插件/bookmark-chrome/src/manifest.json | 8 ++- .../bookmark-chrome/src/options/App.vue | 4 +- 浏览器插件/bookmark-chrome/src/popup/App.vue | 17 ++++--- 浏览器插件/bookmark-chrome/src/popup/popup.js | 51 +++++++++++++++---- .../bookmark-chrome/src/popup/router/index.js | 12 ++--- .../src/popup/router/pages/Index.vue | 17 ++++--- .../src/popup/router/pages/public/Login.vue | 38 ++++++++++++++ .../bookmark-chrome/src/popup/router/routes.js | 13 +++-- 浏览器插件/bookmark-chrome/src/static/sso.js | 20 ++++++++ 浏览器插件/bookmark-chrome/src/store/index.js | 18 +++---- 浏览器插件/bookmark-chrome/webpack.config.js | 5 +- 15 files changed, 188 insertions(+), 57 deletions(-) create mode 100644 浏览器插件/bookmark-chrome/.editorConfig create mode 100644 浏览器插件/bookmark-chrome/src/popup/router/pages/public/Login.vue create mode 100644 浏览器插件/bookmark-chrome/src/static/sso.js diff --git a/浏览器插件/bookmark-chrome/.editorConfig b/浏览器插件/bookmark-chrome/.editorConfig new file mode 100644 index 0000000..be7aa45 --- /dev/null +++ b/浏览器插件/bookmark-chrome/.editorConfig @@ -0,0 +1,8 @@ +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +insert_final_newline = true +trim_trailing_whitespace = true \ No newline at end of file diff --git a/浏览器插件/bookmark-chrome/package.json b/浏览器插件/bookmark-chrome/package.json index bc5c41f..2b1f80b 100644 --- a/浏览器插件/bookmark-chrome/package.json +++ b/浏览器插件/bookmark-chrome/package.json @@ -21,6 +21,7 @@ }, "dependencies": { "axios": "^0.19.0", + "element-ui": "^2.12.0", "vue": "^2.6.10", "vue-router": "^3.0.1", "vuex": "^3.0.1", diff --git a/浏览器插件/bookmark-chrome/scripts/build-zip.js b/浏览器插件/bookmark-chrome/scripts/build-zip.js index 9a84c2a..71605d8 100644 --- a/浏览器插件/bookmark-chrome/scripts/build-zip.js +++ b/浏览器插件/bookmark-chrome/scripts/build-zip.js @@ -5,29 +5,29 @@ const path = require('path'); const archiver = require('archiver'); const DEST_DIR = path.join(__dirname, '../dist'); -const DEST_ZIP_DIR = path.join(__dirname, '../dist-zip'); +const DEST_ZIP_DIR = path.join(__dirname, '../dist-zip'); const extractExtensionData = () => { const extPackageJson = require('../package.json'); return { name: extPackageJson.name, - version: extPackageJson.version - } + version: extPackageJson.version, + }; }; const makeDestZipDirIfNotExists = () => { - if(!fs.existsSync(DEST_ZIP_DIR)) { + if (!fs.existsSync(DEST_ZIP_DIR)) { fs.mkdirSync(DEST_ZIP_DIR); } -} +}; const buildZip = (src, dist, zipFilename) => { console.info(`Building ${zipFilename}...`); - const archive = archiver('zip', { zlib: { level: 9 }}); + const archive = archiver('zip', { zlib: { level: 9 } }); const stream = fs.createWriteStream(path.join(dist, zipFilename)); - + return new Promise((resolve, reject) => { archive .directory(src, false) @@ -40,14 +40,14 @@ const buildZip = (src, dist, zipFilename) => { }; const main = () => { - const {name, version} = extractExtensionData(); + const { name, version } = extractExtensionData(); const zipFilename = `${name}-v${version}.zip`; - + makeDestZipDirIfNotExists(); buildZip(DEST_DIR, DEST_ZIP_DIR, zipFilename) .then(() => console.info('OK')) - .catch(console.err); + .catch(console.err); }; main(); diff --git a/浏览器插件/bookmark-chrome/src/background.js b/浏览器插件/bookmark-chrome/src/background.js index 8610f97..95d9314 100644 --- a/浏览器插件/bookmark-chrome/src/background.js +++ b/浏览器插件/bookmark-chrome/src/background.js @@ -1,4 +1,15 @@ import store from './store'; global.browser = require('webextension-polyfill'); -alert(`Hello ${store.getters.foo}!`); +chrome.extension.onConnect.addListener(port => { + console.log(port); + port.onMessage.addListener(msg => { + switch (msg.type) { + case 'sendToken': + localStorage.setItem('token', msg.data); + break; + default: + console.error('未知的数据', msg); + } + }); +}); diff --git a/浏览器插件/bookmark-chrome/src/manifest.json b/浏览器插件/bookmark-chrome/src/manifest.json index 07fd085..53f65d2 100644 --- a/浏览器插件/bookmark-chrome/src/manifest.json +++ b/浏览器插件/bookmark-chrome/src/manifest.json @@ -19,5 +19,11 @@ "options_ui": { "page": "options/options.html", "chrome_style": true - } + }, + "content_scripts": [{ + "matches": ["http://west.tapme.top/*", "http://bookmark.tapme.top/*","http://localhost:3000/*"], + "js": ["popup/static/sso.js"] + } + + ] } diff --git a/浏览器插件/bookmark-chrome/src/options/App.vue b/浏览器插件/bookmark-chrome/src/options/App.vue index 3216d20..ec9e103 100644 --- a/浏览器插件/bookmark-chrome/src/options/App.vue +++ b/浏览器插件/bookmark-chrome/src/options/App.vue @@ -1,12 +1,12 @@ diff --git a/浏览器插件/bookmark-chrome/src/popup/App.vue b/浏览器插件/bookmark-chrome/src/popup/App.vue index 689e916..3a42280 100644 --- a/浏览器插件/bookmark-chrome/src/popup/App.vue +++ b/浏览器插件/bookmark-chrome/src/popup/App.vue @@ -1,15 +1,20 @@ - + diff --git a/浏览器插件/bookmark-chrome/src/popup/popup.js b/浏览器插件/bookmark-chrome/src/popup/popup.js index 53ab1dd..08fd669 100644 --- a/浏览器插件/bookmark-chrome/src/popup/popup.js +++ b/浏览器插件/bookmark-chrome/src/popup/popup.js @@ -1,15 +1,48 @@ -import Vue from 'vue' -import App from './App' -import store from '../store' -import router from './router' +import Vue from 'vue'; +import App from './App'; +import store from '../store'; +import router from './router'; +import ElementUI from 'element-ui'; +import 'element-ui/lib/theme-chalk/index.css'; +import axios from 'axios'; -global.browser = require('webextension-polyfill') -Vue.prototype.$browser = global.browser +global.browser = require('webextension-polyfill'); +Vue.prototype.$browser = global.browser; +Vue.use(ElementUI); /* eslint-disable no-new */ -new Vue({ +window.vueInstance = new Vue({ el: '#app', store, router, - render: h => h(App) -}) + render: h => h(App), +}); + +/** + * 配置axios + */ +axios.defaults.timeout = 15000; + +/** + * 请求拦截器 + */ +axios.interceptors.request.use( + function(config) { + console.log(config); + return config; + }, + function(error) { + console.error(error); + return Promise.reject(error); + } +); + +axios.interceptors.response.use( + res => { + console.log(res); + return res.data; + }, + error => { + return Promise.reject(error); + } +); diff --git a/浏览器插件/bookmark-chrome/src/popup/router/index.js b/浏览器插件/bookmark-chrome/src/popup/router/index.js index c3fe07e..34b41e0 100644 --- a/浏览器插件/bookmark-chrome/src/popup/router/index.js +++ b/浏览器插件/bookmark-chrome/src/popup/router/index.js @@ -1,9 +1,9 @@ -import Vue from 'vue' -import VueRouter from 'vue-router' -import routes from './routes' +import Vue from 'vue'; +import VueRouter from 'vue-router'; +import routes from './routes'; -Vue.use(VueRouter) +Vue.use(VueRouter); export default new VueRouter({ - routes -}) + routes, +}); diff --git a/浏览器插件/bookmark-chrome/src/popup/router/pages/Index.vue b/浏览器插件/bookmark-chrome/src/popup/router/pages/Index.vue index 325c4fd..d10d49e 100644 --- a/浏览器插件/bookmark-chrome/src/popup/router/pages/Index.vue +++ b/浏览器插件/bookmark-chrome/src/popup/router/pages/Index.vue @@ -1,17 +1,20 @@ diff --git a/浏览器插件/bookmark-chrome/src/popup/router/pages/public/Login.vue b/浏览器插件/bookmark-chrome/src/popup/router/pages/public/Login.vue new file mode 100644 index 0000000..1ffcd02 --- /dev/null +++ b/浏览器插件/bookmark-chrome/src/popup/router/pages/public/Login.vue @@ -0,0 +1,38 @@ + + + + + diff --git a/浏览器插件/bookmark-chrome/src/popup/router/routes.js b/浏览器插件/bookmark-chrome/src/popup/router/routes.js index a1111b4..42e91f9 100644 --- a/浏览器插件/bookmark-chrome/src/popup/router/routes.js +++ b/浏览器插件/bookmark-chrome/src/popup/router/routes.js @@ -1,8 +1,13 @@ -import PageIndex from './pages/Index' +import PageIndex from './pages/Index'; +import Login from './pages/public/Login'; export default [ { path: '/', - component: PageIndex - } -] + component: PageIndex, + }, + { + path: '/public/login', + component: Login, + }, +]; diff --git a/浏览器插件/bookmark-chrome/src/static/sso.js b/浏览器插件/bookmark-chrome/src/static/sso.js new file mode 100644 index 0000000..6ace226 --- /dev/null +++ b/浏览器插件/bookmark-chrome/src/static/sso.js @@ -0,0 +1,20 @@ +/** + * web页面植入脚本,用于授权等一系列操作。 + */ + +console.log('注入了页面'); +var port = chrome.extension.connect({ name: 'data' }); + +window.addEventListener('message', event => { + if (event.data.type === undefined) { + return; + } + console.log('接受到消息', event.data); + switch (event.data.type) { + case 'sendToken': + port.postMessage(event.data); + break; + default: + console.error('未知的事件', event); + } +}); diff --git a/浏览器插件/bookmark-chrome/src/store/index.js b/浏览器插件/bookmark-chrome/src/store/index.js index 45fac81..4baea8a 100644 --- a/浏览器插件/bookmark-chrome/src/store/index.js +++ b/浏览器插件/bookmark-chrome/src/store/index.js @@ -1,17 +1,17 @@ -import Vue from 'vue' -import Vuex from 'vuex' +import Vue from 'vue'; +import Vuex from 'vuex'; -import * as getters from './getters' -import mutations from './mutations' -import * as actions from './actions' +import * as getters from './getters'; +import mutations from './mutations'; +import * as actions from './actions'; -Vue.use(Vuex) +Vue.use(Vuex); export default new Vuex.Store({ state: { - foo: 'bar' + foo: 'bar', }, getters, mutations, - actions -}) + actions, +}); diff --git a/浏览器插件/bookmark-chrome/webpack.config.js b/浏览器插件/bookmark-chrome/webpack.config.js index c3d49b2..7ccecd3 100644 --- a/浏览器插件/bookmark-chrome/webpack.config.js +++ b/浏览器插件/bookmark-chrome/webpack.config.js @@ -10,7 +10,7 @@ const config = { mode: process.env.NODE_ENV, context: __dirname + '/src', entry: { - 'background': './background.js', + background: './background.js', 'popup/popup': './popup/popup.js', 'options/options': './options/options.js', }, @@ -74,12 +74,13 @@ const config = { }), new CopyWebpackPlugin([ { from: 'icons', to: 'icons', ignore: ['icon.xcf'] }, + { from: 'static', to: 'popup/static' }, { from: 'popup/popup.html', to: 'popup/popup.html', transform: transformHtml }, { from: 'options/options.html', to: 'options/options.html', transform: transformHtml }, { from: 'manifest.json', to: 'manifest.json', - transform: (content) => { + transform: content => { const jsonContent = JSON.parse(content); jsonContent.version = version;