1

在 Chrome 上,我注意到如果我在提交表单的请求完成之前销毁 iframe,则该请求将被取消。这似乎不会在 Firefox 和 IE 中发生。

这是规范推荐的吗?其他浏览器是否计划在未来做同样的事情?

4

1 回答 1

0

“其他浏览器是否计划在未来做同样的事情?”

没有线索,但我在下面展示的规范链最终依赖于fetch 规范,这部分是由服务人员推动的,Chrome 和 Firefox 支持, MS Edge 为“开发中”,MS Edge 为“正在考虑” WebKit(截至 2017 年 1 月 17 日)。

WHATWG 的iframe部分指出:

当从文档中删除 iframe 元素时,用户代理必须丢弃该元素的嵌套浏览上下文(如果它不为空),然后将该元素的嵌套浏览上下文设置为空。

注意这发生在没有触发任何卸载事件的情况下(嵌套的浏览上下文及其 Document 被丢弃,而不是卸载)。

WHATWG 的浏览器文档的丢弃Document部分指出:

当浏览上下文要丢弃 Document 时,用户代理必须运行以下步骤:

将文档的可挽救状态设置为 false。

运行由本规范和其他适用规范定义的文档的任何卸载文档清理步骤。

中止文档。 [重点补充]

在任何任务源中删除与文档关联的任何任务,而不运行这些任务。

丢弃 Document 的所有子浏览上下文。

失去从 Document 的浏览上下文到 Document 的强引用。

同一文档中关于中止文档的部分指出:

如果文档被中止,用户代理必须运行以下步骤:

中止每个子浏览上下文的活动文档。如果这导致任何这些 Document 对象的可挽救状态设置为 false,那么也将此 Document 的可挽救状态设置为 false。

在本文档的上下文中取消提取算法的任何实例 [强调添加],丢弃为它们排队的任何任务,并丢弃从网络接收到的任何进一步数据。如果这导致提取算法的任何实例被取消或任何排队的任务或任何网络数据被丢弃,则将 Document 的可挽救状态设置为 false。

如果 Document 有一个活动的解析器,则中止该解析器并将 Document 的可挽救状态设置为 false。

鉴于“获取算法”是浏览器发出任何 HTTP 请求的新标准化方式,我将删除的任何不完整请求的取消解释iframe为与上述部分一致。

参照。如果您还没有受够,请参考fetch 规范。:)

再次参考

iframe元素_

丢弃一个Document

中止一个Document

获取规范

于 2017-01-17T20:52:15.473 回答