From fafffe5aec90e6b65afad923661f46f204148e1e Mon Sep 17 00:00:00 2001 From: fanxb Date: Sun, 31 May 2020 19:16:16 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E4=BD=BF=E7=94=A8background.js=E5=81=9A?= =?UTF-8?q?=E5=90=8E=E5=8F=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 浏览器插件/bookmark-chrome/src/background.js | 22 +++++++++-- 浏览器插件/bookmark-chrome/src/manifest.json | 2 +- 浏览器插件/bookmark-chrome/src/static/sso.js | 19 +++++++--- 浏览器插件/bookmark-chrome/src/util/config.js | 4 +- 浏览器插件/bookmark-chrome/src/util/const.js | 0 .../bookmark-chrome/src/util/httpUtil.js | 37 +++++++++++++++++++ 6 files changed, 71 insertions(+), 13 deletions(-) create mode 100644 浏览器插件/bookmark-chrome/src/util/const.js create mode 100644 浏览器插件/bookmark-chrome/src/util/httpUtil.js diff --git a/浏览器插件/bookmark-chrome/src/background.js b/浏览器插件/bookmark-chrome/src/background.js index 756a4f8..31ef2d7 100644 --- a/浏览器插件/bookmark-chrome/src/background.js +++ b/浏览器插件/bookmark-chrome/src/background.js @@ -1,4 +1,9 @@ global.browser = require('webextension-polyfill'); +import httpUtil from './util/httpUtil.js'; + +window.envType = 'background'; +window.token = localStorage.getItem('token'); + let token = null; let globalPort = null; @@ -22,12 +27,21 @@ chrome.extension.onConnect.addListener(port => { chrome.contextMenus.create( { title: '添加到书签', - onclick: () => { - globalPort.postMessage('点击'); - console.log('我被点击了'); + onclick: (info, tab) => { + console.log(info, tab); + globalPort.postMessage(createMsg('addBookmark', null)); }, }, err => { - console.error(err); + console.log(err); } ); + +/** + * 构建一个标准命令 + * @param {*} code code + * @param {*} data data + */ +function createMsg(code, data) { + return JSON.stringify({ code, data }); +} diff --git a/浏览器插件/bookmark-chrome/src/manifest.json b/浏览器插件/bookmark-chrome/src/manifest.json index bb6e800..58d8fda 100644 --- a/浏览器插件/bookmark-chrome/src/manifest.json +++ b/浏览器插件/bookmark-chrome/src/manifest.json @@ -24,7 +24,7 @@ "chrome_style": true }, "content_scripts": [{ - "matches": ["https://bm.tapme.top/*", "http://bookmark.tapme.top/*", "http://localhost:3000/*"], + "matches": ["*://*/*"], "js": ["static/sso.js"] } diff --git a/浏览器插件/bookmark-chrome/src/static/sso.js b/浏览器插件/bookmark-chrome/src/static/sso.js index 2b19970..be5d1d8 100644 --- a/浏览器插件/bookmark-chrome/src/static/sso.js +++ b/浏览器插件/bookmark-chrome/src/static/sso.js @@ -1,15 +1,22 @@ -/** - * web页面植入脚本,用于授权等一系列操作。 - */ - console.log('注入了页面'); var port = chrome.extension.connect({ name: 'data' }); +/** + * 接受background传来的消息 + */ port.onMessage.addListener(msg => { console.log('收到消息:' + msg); - console.log(window.location); - console.log(window.token); + let obj = JSON.parse(msg); + switch (obj.code) { + case 'addBookmark': + break; + default: + console.error('未知的命令:' + obj.code); + } }); +/** + * 接收当前注入页面传来的消息 + */ window.addEventListener('message', function(event) { if (event.data.type === undefined) { return; diff --git a/浏览器插件/bookmark-chrome/src/util/config.js b/浏览器插件/bookmark-chrome/src/util/config.js index 73e4388..86dbb9a 100644 --- a/浏览器插件/bookmark-chrome/src/util/config.js +++ b/浏览器插件/bookmark-chrome/src/util/config.js @@ -2,8 +2,8 @@ var baseUri; if (process.env.NODE_ENV === 'development') { - // baseUri = 'http://localhost:3000'; - baseUri = 'https://bm.tapme.top'; + baseUri = 'http://localhost:3000'; + // baseUri = 'https://bm.tapme.top'; } else { baseUri = 'https://bm.tapme.top'; } diff --git a/浏览器插件/bookmark-chrome/src/util/const.js b/浏览器插件/bookmark-chrome/src/util/const.js new file mode 100644 index 0000000..e69de29 diff --git a/浏览器插件/bookmark-chrome/src/util/httpUtil.js b/浏览器插件/bookmark-chrome/src/util/httpUtil.js new file mode 100644 index 0000000..5a0e7f8 --- /dev/null +++ b/浏览器插件/bookmark-chrome/src/util/httpUtil.js @@ -0,0 +1,37 @@ +import config from './config'; +import axios from 'axios'; + +axios.defaults.timeout = 15000; +axios.defaults.baseURL = config.baseUrl; + +axios.interceptors.request.use( + function(config) { + config.headers['jwt-token'] = window.token; + return config; + }, + function(error) { + console.error(error); + return Promise.reject(error); + } +); + +axios.interceptors.response.use( + res => { + if (res.data.code === -1) { + localStorage.removeItem('token'); + if (window.envType === 'background') { + window.open(config.ssoUrl); + } else { + window.vueInstance.$router.replace('/public/login'); + } + } else if (res.data.code === 1) { + return res.data.data; + } else { + Promise.reject(res); + } + }, + error => { + return Promise.reject(error); + } +); +export default axios;