我正在做一个翻译单词的浏览器扩展,需要在任意网站上注入一个翻译窗口,要防止当前网站的 CSS 影响翻译窗口的外观,所以提出这个问题。
还有两个方案,都不理想
1 插入一个 iframe,不会受到当前网站 CSS 的影响
2 插入 一个自定义元素 <foo></foo>
1
fe619742721 2018-05-29 11:30:47 +08:00 1
important 不行么
|
2
xiaody 2018-05-29 11:33:06 +08:00 1
iframe 和自定义元素哪里不理想?
CSS 方案可以试试 https://www.w3.org/TR/css-cascade-3/#all-shorthand |
3
yushiro 2018-05-29 11:37:40 +08:00 via iPhone
内联样式的优先级最高,自己先覆盖一遍呗
|
4
cccer 2018-05-29 11:40:24 +08:00 1
|
5
wwjvtwoex OP |
6
banricho 2018-05-29 11:48:15 +08:00
把元素插到 </html> 后面,虽然不符合规范,但是浏览器基本都能识别
|
9
doubleflower 2018-05-29 12:11:50 +08:00 1
以前扫了一遍 web components 相关时记得好象有这么个技术,好象叫 Shadow DOM,chrome 原生支持的
|
10
leega0 2018-05-29 12:19:16 +08:00 1
楼上给了你答案
|
12
milklee 2018-05-29 13:32:20 +08:00 1
之前我也为这个问题纠结了很久,还为此写过一篇文章 https://github.com/lmk123/blog/issues/32
我尝试过挨个重置 css 样式、Shadow DOM、全自定义元素、iframe 这四种方式,最后还是觉得 all 最好。 |
14
banricho 2018-05-29 13:44:54 +08:00
|
15
wwjvtwoex OP @milklee 但使用 “ all ”,注入元素只有外观不受影响,依然不能避免 js 事件处理 的影响,最终还得用 自定义元素。
|
19
wwjvtwoex OP 我没仔细考虑,对注入的元素,“阻止冒泡” 确实可以解决。
|
20
mg122 2018-05-29 15:32:26 +08:00 1
z-index 层和透明度
|
21
chenyu8674 2018-05-29 15:39:37 +08:00 1
用 canvas 画一个 [doge]
|
22
gxm44 2018-05-29 15:52:47 +08:00 1
shadow dom
|
23
codehz 2018-05-29 23:40:43 +08:00
把源站放 iframe 里(
|