浏览上下文和窗口上下文

BrowsingContext 是 Gecko 对规范定义的 浏览上下文 对象的表示。

浏览上下文树

BrowsingContextWindowContext 对象形成一棵树,对应于用于构建它们的框架元素的树。

示例

加载此处列出的 HTML 文档将最终创建一组浏览上下文和窗口上下文,形成树形结构。

<!-- http://example.com/top.html -->
<iframe src="frame1.html"></iframe>
<iframe src="http://mozilla.org/"></iframe>

<!-- http://example.com/frame1.html -->
<iframe src="http://example.com/frame2.html"></iframe>

<!-- http://mozilla.org -->
<iframe></iframe>
<iframe></iframe>
digraph browsingcontext {
node [shape=rectangle]

"BC1" [label="BrowsingContext A"]
"BC2" [label="BrowsingContext B"]
"BC3" [label="BrowsingContext C"]
"BC4" [label="BrowsingContext D"]
"BC5" [label="BrowsingContext E"]
"BC6" [label="BrowsingContext F"]

"WC1" [label="WindowContext\n(http://example.com/top.html)"]
"WC2" [label="WindowContext\n(http://example.com/frame1.html)"]
"WC3" [label="WindowContext\n(http://mozilla.org)"]
"WC4" [label="WindowContext\n(http://example.com/frame2.html)"]
"WC5" [label="WindowContext\n(about:blank)"]
"WC6" [label="WindowContext\n(about:blank)"]

"BC1" -> "WC1";
"WC1" -> "BC2";
"WC1" -> "BC3";
"BC2" -> "WC2";
"BC3" -> "WC3";
"WC2" -> "BC4";
"BC4" -> "WC4";
"WC3" -> "BC5";
"BC5" -> "WC5";
"WC3" -> "BC6";
"BC6" -> "WC6";
}

同步字段

进行中 - 在 https://wiki.mozilla.org/Project_Fission/BrowsingContext 中查看正在进行的文档。

API 文档

class BrowsingContext

这是一种同步上下文类型。它的实例将存在于导航的每个“相关”内容进程中。

在父进程中创建的 BrowsingContext 实例将是 CanonicalBrowsingContext

WindowContext *GetParentWindowContext()

获取嵌入此上下文的父 WindowContext,如果这是顶级上下文,则返回 nullptr

WindowContext *GetTopWindowContext()

获取嵌入此上下文的顶级 WindowContext,如果这是顶级上下文,则返回 nullptr

这等效于重复调用 GetParentWindowContext() 直到它返回 nullptr。

BrowsingContext *GetParent()
BrowsingContext *Top()
static already_AddRefed<BrowsingContext> Get(uint64_t aId)

通过其唯一 ID 查找特定的 BrowsingContext。在使用返回的上下文之前,调用者应该使用 IsDiscarded 检查它是否已被丢弃。

class CanonicalBrowsingContext : public BrowsingContext

当在父进程中构建 BrowsingContext 时,它实际上是 CanonicalBrowsingContext 的实例。

由于位于父进程中,因此可以从 CanonicalBrowsingContext 获取有关上下文的更多信息。

class WindowContext
class WindowGlobalParent : public WindowContext, public WindowGlobalActor, public PWindowGlobalParent
class WindowGlobalChild : public WindowGlobalActor, public PWindowGlobalChild