jquery 删除应用于注入的HTML的CSS样式

5kgi1eie  于 2023-02-11  发布在  jQuery
关注(0)|答案(2)|浏览(117)

我正在创建一个Chrome Extension,它使用JQuery将一个HTML横幅/覆盖注入到当前页面中。
我注意到有些页面会影响我创建的覆盖图。这包括改变覆盖图中元素的边距/字体/等。我试过使用unset,但我仍然有样式的变化。
我创建了一个例子,当在googlestackoverflow之间切换时,复选框和它的文本会移动。

    • 示例**
$("body").append(
  "<div id='my-overlay'><div id='my-overlay-right'>" +
    '<input type="checkbox" id="my-overlay-checkbox" name="my-checkbox" value="MyCheckbox"><label id="my-overlay-checkbox-text">This is a checkbox</label>' +
    "<button id='my-overlay-close-button'>X</button></div></div>"
);

$("#my-overlay *").css({
  all: "unset !important",
});

$("div#my-overlay").css({
  all: "unset !important",
  position: "fixed",
  border: "1px solid black",
  "margin-left": "-250px  !important",
  "margin-top": "0 !important",
  "margin-bottom": "0  !important",
  "margin-right": "0 !important",
  left: "500px",
  top: "-20px",
  width: "500px",
  height: "20px",
  transform: "translate(0, 20px)",
  "z-index": 10000,
  "background-color": "rgba(256,0,0,0.8)",
  transition: "opacity 0.3s, visibility 0.5s",
});

$("div#my-overlay-right").css({
  all: "unset !important",
  float: "right",
  margin: "0  !important",
  padding: 0,
});

$("input#my-overlay-checkbox").css({
  margin: "1px !important",
  padding: "0 !important",
});

$("label#my-overlay-checkbox-text").css({
  all: "unset !important",
  margin: "0",
  padding: "0",
  "font-weight": "normal",
  "font-size": "12px",
  "line-height": "1",
  color: "white",
  "font-family": "Verdana, Geneva, sans-serif",
});
$("button#my-overlay-close-button").css({
  all: "unset !important",
  "font-size": "16px",
  margin: "1px 10px 0 15px !important",
  padding: "0 !important",
  "background-color": "Transparent",
  "background-repeat": "no-repeat",
  border: "none",
  cursor: "pointer",
  overflow: "hidden",
  outline: "none",
  color: "white",
});

从插入网页的组件中删除所有样式的正确方法是什么?

    • 更新**

我试过添加一个reset-this类并将其应用到所有元素中,这修复了googlestackoverflow之间的差异,但在其他页面上仍有一些差异。

$("body").append(
  "<div id='my-overlay' class='reset-this'><div id='my-overlay-right' class='reset-this'>" +
  "<input type=\"checkbox\" id=\"my-overlay-checkbox\" class=\"reset-this\" name=\"my-checkbox\" value=\"MyCheckbox\"><label id=\"my-overlay-checkbox-text\"  class=\"reset-this\">This is a checkbox</label>" +
  "<button id='my-overlay-close-button'  class='reset-this'>X</button></div></div>"
);
$(".reset-this").css({
  animation: "none",
  "animation-delay": "0",
  "animation-direction": "normal",
  "animation-duration": "0",
  "animation-fill-mode": "none",
  "animation-iteration-count": "1",
  "animation-name": "none",
  "animation-play-state": "running",
  "animation-timing-function": "ease",
  "backface-visibility": "visible",
  background: "0",
  "background-attachment": "scroll",
  "background-clip": "border-box",
  "background-color": "transparent",
  "background-image": "none",
  "background-origin": "padding-box",
  "background-position": "0 0",
  "background-position-x": "0",
  "background-position-y": "0",
  "background-repeat": "repeat",
  "background-size": "auto auto",
  border: "0",
  "border-style": "none",
  "border-width": "medium",
  "border-color": "inherit",
  "border-bottom": "0",
  "border-bottom-color": "inherit",
  "border-bottom-left-radius": "0",
  "border-bottom-right-radius": "0",
  "border-bottom-style": "none",
  "border-bottom-width": "medium",
  "border-collapse": "separate",
  "border-image": "none",
  "border-left": "0",
  "border-left-color": "inherit",
  "border-left-style": "none",
  "border-left-width": "medium",
  "border-radius": "0",
  "border-right": "0",
  "border-right-color": "inherit",
  "border-right-style": "none",
  "border-right-width": "medium",
  "border-spacing": "0",
  "border-top": "0",
  "border-top-color": "inherit",
  "border-top-left-radius": "0",
  "border-top-right-radius": "0",
  "border-top-style": "none",
  "border-top-width": "medium",
  bottom: "auto",
  "box-shadow": "none",
  "box-sizing": "content-box",
  "caption-side": "top",
  clear: "none",
  clip: "auto",
  color: "inherit",
  columns: "auto",
  "column-count": "auto",
  "column-fill": "balance",
  "column-gap": "normal",
  "column-rule": "medium none currentColor",
  "column-rule-color": "currentColor",
  "column-rule-style": "none",
  "column-rule-width": "none",
  "column-span": "1",
  "column-width": "auto",
  content: "normal",
  "counter-increment": "none",
  "counter-reset": "none",
  cursor: "auto",
  direction: "ltr",
  display: "inline",
  "empty-cells": "show",
  float: "none",
  font: "normal",
  "font-family": "inherit",
  "font-size": "medium",
  "font-style": "normal",
  "font-variant": "normal",
  "font-weight": "normal",
  height: "auto",
  hyphens: "none",
  left: "auto",
  "letter-spacing": "normal",
  "line-height": "normal",
  "list-style": "none",
  "list-style-image": "none",
  "list-style-position": "outside",
  "list-style-type": "disc",
  margin: "0",
  "margin-bottom": "0",
  "margin-left": "0",
  "margin-right": "0",
  "margin-top": "0",
  "max-height": "none",
  "max-width": "none",
  "min-height": "0",
  "min-width": "0",
  opacity: "1",
  orphans: "0",
  outline: "0",
  "outline-color": "invert",
  "outline-style": "none",
  "outline-width": "medium",
  overflow: "visible",
  "overflow-x": "visible",
  "overflow-y": "visible",
  padding: "0",
  "padding-bottom": "0",
  "padding-left": "0",
  "padding-right": "0",
  "padding-top": "0",
  "page-break-after": "auto",
  "page-break-before": "auto",
  "page-break-inside": "auto",
  perspective: "none",
  "perspective-origin": "50% 50%",
  position: "static",
  right: "auto",
  "tab-size": "8",
  "table-layout": "auto",
  "text-align": "inherit",
  "text-align-last": "auto",
  "text-decoration": "none",
  "text-decoration-color": "inherit",
  "text-decoration-line": "none",
  "text-decoration-style": "solid",
  "text-indent": "0",
  "text-shadow": "none",
  "text-transform": "none",
  top: "auto",
  transform: "none",
  "transform-style": "flat",
  transition: "none",
  "transition-delay": "0s",
  "transition-duration": "0s",
  "transition-property": "none",
  "transition-timing-function": "ease",
  "unicode-bidi": "normal",
  "vertical-align": "baseline",
  visibility: "visible",
  "white-space": "normal",
  widows: "0",
  width: "auto",
  "word-spacing": "normal",
  "z-index": "auto",
  all: "initial unset"
});
wxclj1h5

wxclj1h51#

据我所知,只要你把它注入到另一个网页的DOM中(而不是属于你扩展的内部页面),这个网页仍然可以随时改变它,有时候这会发生在以后,这取决于页面的逻辑。
我避免这种情况的方法是尝试自己用沙箱将其沙箱化,方法是添加一个唯一的id,该id最有可能不会与网页上同名的另一个id冲突(也许使用扩展的id?)
您可以在扩展模块的内容脚本中执行此操作,如下所示:

var extId = chrome.runtime.id;
var elementUniqueId = 'ext_' + extId + '_my-overlay';

并将CSS移动到唯一ID之后。
除此之外,您还需要定期查看这个注入的元素,如果/当它被网页删除/更改时,您需要再次重新注入/重新设置它的样式。
可能是这样的:

setInterval(function () {
    //if my element removed by the page:
    if (!elementUniqueId.length) {
        //inject my element again;
    }
}, 50);

另一种方法是将其作为iframe注入,这样父网页将无法访问它,但这也带来了成本/额外工作(包括在iframe页面和content-script之间来回传递消息)。

m1m5dgzv

m1m5dgzv2#

CSS与选择器的类或ID一起工作(大多数时候),所以您是否尝试过使用jQuery的removeClass删除该类?
如果样式使用的是元素本身(h1,h2,p ...),那么你可以创建一个空的CSS类来将所有内容重置为默认值,然后将这个类应用到你想要重置的项,这样就会覆盖之前所做的所有更改,参见here
祝你好运:)

相关问题