background.js 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. var userInfo = {}
  2. var tempData = null
  3. var openList = {}
  4. // 从 storage 中读取数据
  5. chrome.storage.local.get(['owoOpenList'], (result) => {
  6. if (result.owoOpenList) {
  7. openList = result.owoOpenList
  8. }
  9. })
  10. // 保存到 storage 中
  11. function saveOpenList() {
  12. chrome.storage.local.set({ owoOpenList: openList })
  13. }
  14. function reloadUser (callBack) {
  15. chrome.storage.sync.get('userInfo', function(data) {
  16. // alert(data)
  17. userInfoTemp = data.userInfo
  18. if (!userInfoTemp) return
  19. username = userInfoTemp.username
  20. password = userInfoTemp.password
  21. if (username && password) {
  22. fetch(`http://user.lamp.run/login`, {
  23. method: 'POST',
  24. headers: {
  25. "Content-Type": "application/json"
  26. },
  27. body: JSON.stringify({
  28. type: "assist",
  29. username: username,
  30. password: password
  31. })
  32. }).then((response) => {return response.json();}).then((res) => {
  33. if (res.err === 0) {
  34. userInfo = res.data
  35. if (callBack) callBack()
  36. }
  37. })
  38. }
  39. })
  40. }
  41. reloadUser()
  42. // 对数据进行处理
  43. function clearData (data) {
  44. let returnData = []
  45. data.forEach(element => {
  46. if (openList[element.id] || element.type == 'autoRun') {
  47. returnData.push(element)
  48. }
  49. })
  50. return returnData
  51. }
  52. function reGetData (url, callBack) {
  53. const nowTime = Date.parse(new Date())
  54. const serverUrl = 'https://assist.lamp.run/assistAll'
  55. fetch(`${serverUrl}?username=` + (userInfo.username || ''), {
  56. method: 'POST',
  57. body: JSON.stringify({
  58. "edition": 7,
  59. "url": url
  60. }),
  61. redirect: 'follow'
  62. }).then(data => data.json()).then(dataTemp => {
  63. tempData = {
  64. time: nowTime,
  65. data: dataTemp
  66. }
  67. if (callBack) callBack(dataTemp)
  68. })
  69. }
  70. function handleFetchRequest(url, options) {
  71. return new Promise((resolve, reject) => {
  72. fetch(url, options)
  73. .then(async response => {
  74. try {
  75. const contentType = response.headers.get('content-type');
  76. let data;
  77. if (contentType && contentType.includes('application/json')) {
  78. data = await response.json();
  79. } else {
  80. data = await response.text();
  81. }
  82. resolve({
  83. ok: response.ok,
  84. status: response.status,
  85. statusText: response.statusText,
  86. headers: Object.fromEntries(response.headers.entries()),
  87. data: data,
  88. url: response.url
  89. });
  90. } catch (error) {
  91. reject({
  92. error: '解析响应失败',
  93. details: error.message,
  94. status: response.status
  95. });
  96. }
  97. })
  98. .catch(error => {
  99. reject({
  100. error: '请求失败',
  101. details: error.message,
  102. type: error.name
  103. });
  104. });
  105. });
  106. }
  107. // 监听消息
  108. chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) {
  109. // console.log(message)
  110. switch (message.name) {
  111. case 'getData':
  112. const nowTime = Date.parse(new Date())
  113. // 缓存
  114. if (tempData && (tempData.time + 60 * 60 * 1000) > nowTime) {
  115. console.log('使用缓存返回!', tempData)
  116. sendResponse(clearData(tempData.data))
  117. } else {
  118. reGetData(message.url, (dataTemp) => {
  119. sendResponse(clearData(dataTemp))
  120. })
  121. }
  122. break;
  123. case 'fetch': // 新增的 fetch 处理方法
  124. const { url, options = {} } = message;
  125. handleFetchRequest(url, options)
  126. .then(result => {
  127. sendResponse({
  128. success: true,
  129. ...result
  130. });
  131. })
  132. .catch(error => {
  133. sendResponse({
  134. success: false,
  135. error: error
  136. });
  137. });
  138. break;
  139. case 'clear':
  140. tempData = null
  141. // fetch(`https://assist.lamp.run/blockList`).then(data => data.json()).then(dataTemp => {
  142. // blockListTemp = dataTemp
  143. // chrome.storage.sync.set({userInfo: {}})
  144. // userInfo = {}
  145. // lanjie(dataTemp)
  146. // sendResponse()
  147. // })
  148. case 'reloadUser':
  149. setTimeout(() => {
  150. reloadUser(() => {
  151. reGetData('')
  152. })
  153. }, 100);
  154. default:
  155. break;
  156. }
  157. return true
  158. })
  159. // 拦截文件功能尚未适配
  160. // var blockListTemp = null
  161. // if (blockListTemp != null) {
  162. // lanjie(blockListTemp)
  163. // } else {
  164. // fetch(`https://assist.lamp.run/blockList`).then(data => data.json()).then(dataTemp => {
  165. // blockListTemp = dataTemp
  166. // lanjie(dataTemp)
  167. // })
  168. // }
  169. // function lanjie (blockList) {
  170. // // 拦截请求
  171. // chrome.webRequest.onBeforeRequest.addListener(
  172. // function(details) {
  173. // for (const key in blockList) {
  174. // if (details.url.includes(key) || new RegExp(key).test(details.url) || details.url == key) {
  175. // console.log(`拦截请求:${details.url}`)
  176. // console.log(`替换请求:${blockList[key]}`)
  177. // return {
  178. // redirectUrl: blockList[key]
  179. // }
  180. // }
  181. // }
  182. // return {
  183. // cancel: false
  184. // };
  185. // },
  186. // {urls: ["<all_urls>"]},
  187. // ["blocking"]
  188. // )
  189. // }
  190. chrome.runtime.onMessageExternal.addListener(
  191. function(request, sender, sendResponse) {
  192. console.log(request)
  193. switch (request.name) {
  194. case 'sendMessage':
  195. var myHeaders = new Headers();
  196. myHeaders.append("Content-Type", "application/json");
  197. var raw = JSON.stringify({
  198. "first": {
  199. "value": "插件提示",
  200. "color": "#173177"
  201. },
  202. "keyword1": {
  203. "value": request.keyword1,
  204. "color": "#173177"
  205. },
  206. "keyword2": {
  207. "value": request.keyword1,
  208. "color": "#173177"
  209. },
  210. "keyword3": {
  211. "value": (new Date()).toLocaleString(),
  212. "color": "#173177"
  213. },
  214. "remark": {
  215. "value": request.remark,
  216. "color": "#173177"
  217. }
  218. });
  219. var requestOptions = {
  220. method: 'POST',
  221. headers: myHeaders,
  222. body: raw,
  223. redirect: 'follow'
  224. };
  225. fetch(`https://message.lamp.run/workWeixin?type=${request.type}&template=EvpHwEBpG2rkLHYMtIH2ADww9JCQwEaWlTAqyoPF6xQ`, requestOptions)
  226. .then(response => response.text())
  227. .then(result => console.log(result))
  228. .catch(error => console.log('error', error));
  229. case 'notifications':
  230. chrome.notifications.create(null, {
  231. type: 'basic',
  232. iconUrl: 'img/48.png',
  233. title: request.title,
  234. message: request.message
  235. });
  236. case 'playMusic':
  237. let musicUrl = request.url ? request.url : 'https://cunchu.site/work/assist/lingyin.wav'
  238. new Audio(musicUrl).play()
  239. default:
  240. break;
  241. }
  242. sendResponse('ok')
  243. }
  244. );
  245. // function logResponse(responseDetails) {
  246. // console.log(responseDetails);
  247. // }
  248. // chrome.webRequest.onCompleted.addListener(
  249. // logResponse,
  250. // {urls: ["<all_urls>"]}
  251. // );