var userInfo = {} var tempData = null var openList = {} // 从 storage 中读取数据 chrome.storage.local.get(['owoOpenList'], (result) => { if (result.owoOpenList) { openList = result.owoOpenList } }) // 保存到 storage 中 function saveOpenList() { chrome.storage.local.set({ owoOpenList: openList }) } function reloadUser (callBack) { chrome.storage.sync.get('userInfo', function(data) { // alert(data) userInfoTemp = data.userInfo if (!userInfoTemp) return username = userInfoTemp.username password = userInfoTemp.password if (username && password) { fetch(`http://user.lamp.run/login`, { method: 'POST', headers: { "Content-Type": "application/json" }, body: JSON.stringify({ type: "assist", username: username, password: password }) }).then((response) => {return response.json();}).then((res) => { if (res.err === 0) { userInfo = res.data if (callBack) callBack() } }) } }) } reloadUser() // 对数据进行处理 function clearData (data) { let returnData = [] data.forEach(element => { if (openList[element.id] || element.type == 'autoRun') { returnData.push(element) } }) return returnData } function reGetData (url, callBack) { const nowTime = Date.parse(new Date()) const serverUrl = 'https://assist.lamp.run/assistAll' fetch(`${serverUrl}?username=` + (userInfo.username || ''), { method: 'POST', body: JSON.stringify({ "edition": 7, "url": url }), redirect: 'follow' }).then(data => data.json()).then(dataTemp => { tempData = { time: nowTime, data: dataTemp } if (callBack) callBack(dataTemp) }) } function handleFetchRequest(url, options) { return new Promise((resolve, reject) => { fetch(url, options) .then(async response => { try { const contentType = response.headers.get('content-type'); let data; if (contentType && contentType.includes('application/json')) { data = await response.json(); } else { data = await response.text(); } resolve({ ok: response.ok, status: response.status, statusText: response.statusText, headers: Object.fromEntries(response.headers.entries()), data: data, url: response.url }); } catch (error) { reject({ error: '解析响应失败', details: error.message, status: response.status }); } }) .catch(error => { reject({ error: '请求失败', details: error.message, type: error.name }); }); }); } // 监听消息 chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) { // console.log(message) switch (message.name) { case 'getData': const nowTime = Date.parse(new Date()) // 缓存 if (tempData && (tempData.time + 60 * 60 * 1000) > nowTime) { console.log('使用缓存返回!', tempData) sendResponse(clearData(tempData.data)) } else { reGetData(message.url, (dataTemp) => { sendResponse(clearData(dataTemp)) }) } break; case 'fetch': // 新增的 fetch 处理方法 const { url, options = {} } = message; handleFetchRequest(url, options) .then(result => { sendResponse({ success: true, ...result }); }) .catch(error => { sendResponse({ success: false, error: error }); }); break; case 'clear': tempData = null // fetch(`https://assist.lamp.run/blockList`).then(data => data.json()).then(dataTemp => { // blockListTemp = dataTemp // chrome.storage.sync.set({userInfo: {}}) // userInfo = {} // lanjie(dataTemp) // sendResponse() // }) case 'reloadUser': setTimeout(() => { reloadUser(() => { reGetData('') }) }, 100); default: break; } return true }) // 拦截文件功能尚未适配 // var blockListTemp = null // if (blockListTemp != null) { // lanjie(blockListTemp) // } else { // fetch(`https://assist.lamp.run/blockList`).then(data => data.json()).then(dataTemp => { // blockListTemp = dataTemp // lanjie(dataTemp) // }) // } // function lanjie (blockList) { // // 拦截请求 // chrome.webRequest.onBeforeRequest.addListener( // function(details) { // for (const key in blockList) { // if (details.url.includes(key) || new RegExp(key).test(details.url) || details.url == key) { // console.log(`拦截请求:${details.url}`) // console.log(`替换请求:${blockList[key]}`) // return { // redirectUrl: blockList[key] // } // } // } // return { // cancel: false // }; // }, // {urls: [""]}, // ["blocking"] // ) // } chrome.runtime.onMessageExternal.addListener( function(request, sender, sendResponse) { console.log(request) switch (request.name) { case 'sendMessage': var myHeaders = new Headers(); myHeaders.append("Content-Type", "application/json"); var raw = JSON.stringify({ "first": { "value": "插件提示", "color": "#173177" }, "keyword1": { "value": request.keyword1, "color": "#173177" }, "keyword2": { "value": request.keyword1, "color": "#173177" }, "keyword3": { "value": (new Date()).toLocaleString(), "color": "#173177" }, "remark": { "value": request.remark, "color": "#173177" } }); var requestOptions = { method: 'POST', headers: myHeaders, body: raw, redirect: 'follow' }; fetch(`https://message.lamp.run/workWeixin?type=${request.type}&template=EvpHwEBpG2rkLHYMtIH2ADww9JCQwEaWlTAqyoPF6xQ`, requestOptions) .then(response => response.text()) .then(result => console.log(result)) .catch(error => console.log('error', error)); case 'notifications': chrome.notifications.create(null, { type: 'basic', iconUrl: 'img/48.png', title: request.title, message: request.message }); case 'playMusic': let musicUrl = request.url ? request.url : 'https://cunchu.site/work/assist/lingyin.wav' new Audio(musicUrl).play() default: break; } sendResponse('ok') } ); // function logResponse(responseDetails) { // console.log(responseDetails); // } // chrome.webRequest.onCompleted.addListener( // logResponse, // {urls: [""]} // );