我正在做一个翻译单词的浏览器扩展,需要在任意网站上注入一个翻译窗口,要防止当前网站的 CSS 影响翻译窗口的外观,所以提出这个问题。
还有两个方案,都不理想
1 插入一个 iframe,不会受到当前网站 CSS 的影响
2 插入 一个自定义元素 <foo></foo>
![]() | 1 fe619742721 2018-05-29 11:30:47 +08:00 ![]() important 不行么 |
![]() | 2 xiaody 2018-05-29 11:33:06 +08:00 ![]() 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 ![]() |
![]() | 5 wwjvtwoex OP |
![]() | 6 banricho 2018-05-29 11:48:15 +08:00 ![]() |
![]() | 9 doubleflower 2018-05-29 12:11:50 +08:00 ![]() 以前扫了一遍 web components 相关时记得好象有这么个技术,好象叫 Shadow DOM,chrome 原生支持的 |
![]() | 10 leega0 2018-05-29 12:19:16 +08:00 ![]() 楼上给了你答案 |
![]() | 12 milklee 2018-05-29 13:32:20 +08:00 &nbp; ![]() 之前我也为这个问题纠结了很久,还为此写过一篇文章 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 ![]() z-index 层和透明度 |
![]() | 21 chenyu8674 2018-05-29 15:39:37 +08:00 ![]() 用 canvas 画一个 [doge] |
![]() | 22 gxm44 2018-05-29 15:52:47 +08:00 ![]() shadow dom |
![]() | 23 codehz 2018-05-29 23:40:43 +08:00 把源站放 iframe 里( |