微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

渲染引擎和 JavaScript 引擎如何在浏览器中通信?

如何解决渲染引擎和 JavaScript 引擎如何在浏览器中通信?

我正在寻找有关此问题的详细答案。

我已经知道的

所以我对调用堆栈和回调有一些了解,并且浏览器通过 Web API 添加功能,这些 API 通过事件循环添加回调。我还在某处阅读了有关具有 API 的 JS 引擎的信息。

我想了解什么

  • Web API 如何向 JS 引擎公开? (如果这是关于 具有 API 的 JS 引擎,关于该 API 如何工作的一些描述 做)
  • 渲染引擎的行为如何通过 JavaScript,比如操作 DOM、CSSOM 等? (如果我明白 正确,这相当于询问 Web API 是如何工作的)

谢谢!

解决方法

从(C++ 等)应用程序开发的角度来看,JavaScript 引擎是可嵌入的库;浏览器就是这样一个嵌入器。任何库都定义了一个可以使用它的公共接口——它的应用程序编程接口(或简称 API)。 JS 引擎的 API 应该是什么样子没有标准;每个引擎都定义了自己的引擎,并随着时间的推移根据需要进行改进。 V8 是 here

JS 引擎 API 的核心功能是允许嵌入器向 JavaScript 环境提供由嵌入器自己的 C++ 实现支持的对象和函数。本质上,这定义了一个映射,有时也称为“绑定”。例如,嵌入器可以说“我想要一个 document 对象,它应该看起来有一个属性 .location,它由我的 getter 函数 DocumentLocationGetter() {...} 支持,它应该(似乎)有一个方法 .createElement(),它由我的另一个函数 DocumentCreateElement(...) {...}" 支持,依此类推。

这就是您的两个问题的答案:浏览器将某些函数公开给 JavaScript,然后可以从那里调用这些函数。浏览器决定在调用此类函数时要执行的操作(例如:添加或删除 DOM 节点、更改 CSS 属性、将事件处理程序存储在某个元素的事件处理程序列表中,...)。当然浏览器/嵌入器也可以调用JS引擎,例如在调用事件处理程序时,它可以告诉引擎“请立即执行函数button1_clicked”。

有关更多详细信息,请参见例如v8.dev/docs/embed

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?