代码之家  ›  专栏  ›  技术社区  ›  rohit-biswas

浏览器渲染挂钩

  •  1
  • rohit-biswas  · 技术社区  · 6 年前

    浏览器是否提供了任何预渲染挂钩,以便在渲染前应用对DOM元素样式的更改?

    例如,我可能想更改任何 红色 绿色

    这是对浏览器扩展的要求,因此解决方案应该跨不同的网页工作。在源代码不可知的情况下重写元素的样式并不容易,因为元素的样式是在其上运行的css和javascript的结果,并且不同网站的机制不同。想到的方法是:

    • 分析网页的css和javascript以确定元素的样式。这似乎是多余的,因为浏览器也在这样做。
    • 扫描DOM并检查每个元素的计算样式和重写内容。这是可行的,但是如果元素动态变化,我们必须重复扫描可能很重的变化。

    那么这样的浏览器钩子存在吗?如果没有,你会推荐什么替代方法?

    2 回复  |  直到 6 年前
        1
  •  1
  •   Siddhesh Rane    6 年前

    对于您正在尝试实现的这类事情,查看一个名为 Dark Reader . 这个扩展可以使整个页面变暗,但是通过分析代码的CSS,它可以智能地做到这一点。如果有什么东西已经黑了,它就会保持原样。只有在需要对比度的情况下,明亮的背景才会变黑,文本才会变白。 一个图像能让事情变得清晰

    原件 Original

    呈现的黑暗阅读器 enter image description here

    黑暗阅读器使用JS分析CSS和样式,并在页面中注入自己的CSS样式以获得所需的效果。

    如果您真的想点击浏览器的渲染管道,那么看看 Project Houdini 这将允许以后对浏览器进行此类自定义。现在还没准备好。

        2
  •  1
  •   T.J. Crowder    6 年前

    没有每个元素的呈现挂钩,没有。您可以在下一帧呈现之前请求回调(通常每秒有60帧),通过 requestAnimationFrame 但是那不是一个好地方来做你想做的那种检查。

    要捕获对单个元素的更改,可以设置 mutation observers 捕捉对其所做的更改 style 属性(哪个 通过设置 风格 代码中的属性)。你会想看看这是否会变成性能问题。

    所以我怀疑你需要把你所描述的和上面的结合起来:

    • 冲刷 style sheets 寻找你想要改变的规则
    • 使用要更改的内嵌样式标识元素
    • 倾听对 风格 属性,以便在必要时响应这些更改