background.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. // background.js
  2. chrome.runtime.onInstalled.addListener(function () {
  3. console.log("插件已被安装");
  4. });
  5. let pageState = 0; // 0 - 未创建,1 - 已创建
  6. let pageInfo = null;
  7. let pageId = "";
  8. let tabId = "";
  9. chrome.runtime.onMessage.addListener(async (request, sender, sendResponse) => {
  10. if (request.action === "show_popup") {
  11. tabId = sender.tab.id;
  12. pageInfo = request;
  13. pageInfo.tabId = tabId;
  14. try {
  15. await chrome.tabs.get(pageId);
  16. } catch {
  17. pageState = 0; // 说明没找到
  18. }
  19. if (pageState === 0) {
  20. chrome.windows.create(
  21. {
  22. url: chrome.runtime.getURL("page.html"), // 指向你的弹出页面
  23. type: "popup", // 设置为弹出窗口
  24. width: 1000,
  25. height: 750,
  26. focused: true,
  27. left: 100, // 可选,窗口的左边缘
  28. top: 100, // 可选,窗口的上边缘
  29. },
  30. (newTab) => {
  31. pageId = newTab.tabs[0].id;
  32. pageState = 1;
  33. }
  34. );
  35. } else {
  36. chrome.tabs.get(pageId, (tab) => {
  37. if (tab) {
  38. chrome.windows.update(tab.windowId, { focused: true });
  39. chrome.tabs.update(pageId, { active: true });
  40. sendTabMessage(pageId, pageInfo);
  41. }
  42. });
  43. }
  44. }
  45. });
  46. // 监听已更新的标签,以找出何时打开了 page.html
  47. chrome.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
  48. if (changeInfo.status === "complete" && tab.url.includes("page.html")) {
  49. sendTabMessage(tabId, pageInfo);
  50. }
  51. });
  52. function sendTabMessage(tabId, data) {
  53. chrome.tabs.sendMessage(tabId, {
  54. msgToPopup: "发送页面",
  55. data,
  56. pageState: pageState,
  57. });
  58. }
  59. // // background.js
  60. // chrome.runtime.onInstalled.addListener(function () {
  61. // console.log("插件已被安装");
  62. // });
  63. // let jsRequests = [];
  64. // let jsRequestsByTab = {}; // 用于存储每个标签页的请求
  65. // chrome.webRequest.onBeforeRequest.addListener(
  66. // (details) => {
  67. // const tabId = details.tabId; // 获取当前请求的标签页 ID
  68. // const url = details.url;
  69. // let uri = new URL(url);
  70. // if (
  71. // details.initiator &&
  72. // uri.pathname.endsWith(".js") &&
  73. // (uri.protocol.startsWith("http") || uri.protocol.startsWith("https"))
  74. // ) {
  75. // // 确保有个数组来记录当前标签页的请求
  76. // if (!jsRequestsByTab[tabId]) {
  77. // jsRequestsByTab[tabId] = [];
  78. // }
  79. // jsRequestsByTab[tabId].push(url);
  80. // }
  81. // },
  82. // { urls: ["<all_urls>"] }
  83. // );
  84. // chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
  85. // if (request.action === "getJsRequests") {
  86. // const tabId = sender.tab.id; // 获取请求来源的标签页 ID
  87. // sendResponse(jsRequestsByTab[tabId] || []);
  88. // }
  89. // });
  90. // // 监听标签页更新(包括刷新)事件以清空请求记录
  91. // chrome.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
  92. // if (changeInfo.status === "loading") {
  93. // // 标签页加载完成时清空请求记录
  94. // delete jsRequestsByTab[tabId];
  95. // }
  96. // });
  97. // // 监听标签页关闭事件以清空请求记录
  98. // chrome.tabs.onRemoved.addListener((tabId) => {
  99. // delete jsRequestsByTab[tabId]; // 清空对应标签页的请求记录
  100. // });