content.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. let overDiv;
  2. chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
  3. if (request.action === "highlight") {
  4. if (request.message && !isOpen) {
  5. overDiv = document.createElement("div");
  6. overDiv.classList.add("bg-overDiv");
  7. // CSS样式内容
  8. var css = `
  9. .bg-overDiv{
  10. position: fixed;
  11. opacity: 0.5;
  12. background: rgb(20 122 218 / 85%);
  13. backdrop-filter: blur(5px);
  14. cursor: pointer;
  15. z-index: 99999999999;
  16. display: none;
  17. }`;
  18. // 创建一个style元素
  19. var style = document.createElement("style");
  20. style.classList.add("bg-style");
  21. // 为style元素添加CSS内容
  22. if (style.styleSheet) {
  23. style.styleSheet.cssText = css;
  24. } else {
  25. style.appendChild(document.createTextNode(css));
  26. }
  27. // 将style元素添加到body的末尾
  28. document.body.appendChild(style); //把这个样式加入body的最后
  29. document.body.appendChild(overDiv);
  30. isOpen = true;
  31. window.addEventListener("click", clickHandler);
  32. window.addEventListener("mousemove", mouseMoveHandler);
  33. }
  34. if (!request.message && isOpen) {
  35. document.querySelector(".bg-overDiv")?.remove();
  36. document.querySelector(".bg-style")?.remove();
  37. window.removeEventListener("click", clickHandler);
  38. window.removeEventListener("mousemove", mouseMoveHandler);
  39. isOpen = false;
  40. }
  41. }
  42. });
  43. let isOpen = false;
  44. function clickHandler(e) {
  45. console.log(oldTarget);
  46. }
  47. // window.addEventListener("click", function (e) {
  48. // // e.preventDefault();
  49. // // e.stopPropagation();
  50. // console.log("点击");
  51. // });
  52. let oldTarget;
  53. function mouseMoveHandler(e) {
  54. if (!isOpen) return;
  55. let target =
  56. findTarget(document.elementsFromPoint(e.clientX, e.clientY)) || e.target;
  57. if (oldTarget !== target) {
  58. overDiv.style.cssText = "";
  59. oldTarget = target;
  60. let rect = target.getClientRects();
  61. if (rect.length > 0) {
  62. rect = rect[0];
  63. overDiv.style.cssText =
  64. "display: block; top:" +
  65. rect.top +
  66. "px;left: " +
  67. rect.left +
  68. "px; width: " +
  69. rect.width +
  70. "px; height: " +
  71. rect.height +
  72. "px;";
  73. }
  74. }
  75. oldTarget = target;
  76. let oldEle = document.querySelector(".bg-overlay");
  77. if (oldEle) {
  78. oldEle.classList.remove("bg-overlay");
  79. }
  80. target.classList.add("bg-overlay");
  81. }
  82. function findTarget(eles) {
  83. for (let i = 0; i < eles.length; i++) {
  84. if (eles[i].classList.contains("bg-overDiv") === false) return eles[i];
  85. }
  86. }
  87. function findChildren(ele, x, y) {
  88. let clds = ele.children;
  89. let findEle = ele;
  90. if (clds.length > 0) {
  91. let len = clds.length;
  92. let cur = null;
  93. for (let i = 0; i < len; i++) {
  94. let rect = clds[i].getClientRects();
  95. if (!rect[0]) continue;
  96. if (
  97. rect[0].x + rect[0].width >= x &&
  98. rect[0].x <= x &&
  99. rect[0].y + rect[0].height >= y &&
  100. rect[0].y <= y
  101. ) {
  102. findEle = findChildren(clds[i], x, y);
  103. break;
  104. }
  105. }
  106. }
  107. return findEle;
  108. }