如何在Dart中判断DOM何时准备就绪?

4

在页面准备好后,我希望能获取一些DOM元素的信息,但我还没有找到如何确定页面准备好的方法。我尝试使用document.on.contentLoadeddocument.on.readyStateChange,但似乎都不起作用。在下面的代码中,onContentLoaded()onReadyChanged()从未被调用。

class WhiteTrace {

  WhiteTrace() {    
  }

  void onContentLoaded(Event e) {
    print("onContentLoaded");
    // This never gets called 
  }

  void onReady() {
    print("onReady");
    // Do stuff
  }

  void onReadyChanged(Event e) {
    print("onReadyStateChanged");
    // This never gets called
    if (document.readyState == "complete") {
      onReady();
      document.on.readyStateChange.remove(onReadyChanged);
    }
  }

  void onResize(Event e) {
    // Do stuff
  }

  void run() {
    write("Hello World!");
    document.on.contentLoaded.add(onContentLoaded);

    window.on.resize.add(onResize);

    document.on.readyStateChange.add(onReadyChanged); 
    print("readyState: " + document.readyState);
    if (document.readyState == "complete") {
      document.on.readyStateChange.remove(onReadyChanged);
      onReady();
    }
  }

  void write(String message) {
    // the HTML library defines a global "document" variable
    document.query('#status').innerHTML = message;
  }
}

void main() {
  new WhiteTrace().run();
}

你可以随时使用 window.on.load。正确的 DOM 事件是 document.addEventListener("DOMContentLoaded"),所以请尝试使用 document.on.DOMContentLoaded - Raynos
在DocumentEvents接口中,我找不到任何名为“DOMContentLoaded”的事件。你确定它存在吗? - Curyous
DOMContentLoaded是w3c定义的事件名称。我不知道Dart或其DOM仿真层的任何信息。必须有一些机制使Dart编译类似于document.addEventListener("DOMContentLoaded", cb)的js代码。 - Raynos
1
我非常确定 document.on.contentLoadedDOMContentLoaded 的等效形式。 - Curyous
这是相关的错误,你可能想要给它点赞:http://code.google.com/p/dart/issues/detail?id=619 - Seth Ladd
1个回答

7

2
这基本上意味着他正在监听已经触发的事件。因此,事件处理程序永远不会被触发。 - Raynos
代码已经处理了这种情况,但我不认为这还是正确的。最初,我得到了一个“正在加载”的readyState和一些HTML元素的查询返回null。后来,我得到了“完成”和一个有效的HTML元素。你提供的链接也指出:“我们正在考虑允许Dart代码在脚本加载后立即运行”。 - Curyous

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接