【问题标题】:Check if window dom is parsing or not检查窗口 dom 是否正在解析
【发布时间】:2014-04-06 01:28:07
【问题描述】:

所以SDK有这个检查窗口是否正在加载的功能,代码如下。

我的问题是如果发生了 innerHTML 或 appendChild 或改变 html 的东西怎么办?这会带回 loadContext 吗?我想知道窗口中的DOM是完全解析完成还是正在解析中,这种方法可以吗?

编辑:实际上这是查看文档是否加载的代码:

const isInteractive = window =>
  window.document.readyState === "interactive" ||
  isDocumentLoaded(window) ||
  // XUL documents stays '"uninitialized"' until it's `readyState` becomes
  // `"complete"`.
  isXULDocumentWindow(window) && window.document.readyState === "interactive";
exports.isInteractive = isInteractive;

const isXULDocumentWindow = ({document}) =>
  document.documentElement &&
  document.documentElement.namespaceURI === XUL_NS;

/**
* Check if the given window is completely loaded.
* i.e. if its "load" event has already been fired and all possible DOM content
* is done loading (the whole DOM document, images content, ...)
* @params {nsIDOMWindow} window
*/
function isDocumentLoaded(window) {
  return window.document.readyState == "complete";
}
exports.isDocumentLoaded = isDocumentLoaded;

但是当解析innerHTML 时,readyState 会进入交互状态吗?我想知道页面何时完全呈现。

【问题讨论】:

    标签: html firefox firefox-addon html-parsing readystate


    【解决方案1】:

    动态 HTML 更改不会影响document.readyState property,它是单向街道。解析文档时的值为"loading",解析完成后的值为"interactive",只有图像之类的内容需要加载(DOMContentLoaded 触发事件),所有完成后的值为"complete"load 触发事件) .之后就不再变化了。

    【讨论】:

    • 啊,你认为 dom 解析器需要多长时间来呈现 appendChild 和 innerHTML 更新之类的内容?没有触发绘制完成事件?
    • @Noitidart:渲染是异步进行的,只有 DOM 更改是同步的。 innerHTML 可能需要一段时间,具体取决于 HTML 代码的复杂程度。另一方面,appendChild 非常快 - 这里不涉及解析。有MozAfterPaint event,但你不知道哪一个是“最终”绘画事件。
    • 啊,非常感谢 MozAfterPaint 我知道我记得类似的东西,但找不到。好的,谢谢弗拉德!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-17
    • 1970-01-01
    相关资源
    最近更新 更多