javascript - 防止现有 CSS 样式注入(inject) HTML/CSS

标签 javascript html css internet-explorer code-injection

我正在做一个元素,该元素在我无法控制的网页上注入(inject) JS+CSS+HTML。

我担心主机页面对我注入(inject)的代码进行样式设置 -- 我希望我的注入(inject)代码只遵循我的样式,而不是他们的样式。

目前我能想到的唯一方法是为容器明确指定每个可能的标签 <div>的类(使用预定义的、已知的浏览器默认值)并依赖于这些规则的继承来向下传播到我注入(inject)的 HTML 的其余部分。此 CSS 需要出现在页面的底部 <head>标签。

不过,我认为这不是最好的解决方案,我也不期待实现它。当然有更好的方法。

最佳答案

其他人提出了很好的方法来防止您的 CSS 影响页面,并确保您的 CSS 优先,但您似乎最关心页面的 CSS 对您的影响 - 即添加一种时髦的、意想不到的样式(比如让所有的 div 都有粉红色的背景)。

我能想到的防止它们的样式影响注入(inject)代码的唯一方法是将注入(inject)的内容沙箱化,比如在 iframe 中。否则,您需要定义的东西太多了——您必须定义每一种样式(paddingbordermargin , background... 列表在“*”选择器(或者更好的是,“#yourid *”,所以你只需覆盖你自己的内容),这样你就可以保证对你的 CSS 的绝对控制。

编辑:我意识到后一种解决方案不一定会太痛苦,如果您使用全选器将所有内容重置为基线:

#myid * {
    somestyle1: default;
    somestyle2: default;
    ... 
}

我找到了 someone who has written up such a solution .如果您在页面上向下滚动足够远,就会看到它(来自 SuzyUK)。它看起来并不完整,但肯定是一个好的开始。

(我也很想知道是否有防止这种情况发生的好方法。我之前编写过 Greasemonkey 脚本,将代码注入(inject)页面,并且不得不编写 CSS 来覆盖页面的 CSS,但是在在那些情况下,我知道我的目标是谁,并且可以直接针对页面定制我的 CSS。)

关于javascript - 防止现有 CSS 样式注入(inject) HTML/CSS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/732748/

相关文章:

javascript - Jquery异步问题?

javascript - 使用 Greasemonkey 根据一个单元格的内容更改行格式?

javascript - 如何将 2 个 OpenLayer 标记动画添加到页面? Clickevent似乎被覆盖了

javascript - 有没有办法选择兄弟节点?

html - 如何将按钮和文本输入设置为与表中其他行相同的宽度?

javascript - 粘性滚动小部件

javascript - 将 javascript 和 css 存储在数据库中是个坏主意吗?

Javascript 不适用于加载的内容

javascript - 将 HTML 字符串转换为 DOM 元素?

javascript - 使用 Javascript 更改单元格的显示样式