GWT中的DOM准备就绪

3
在GWT中是否有类似jquery的 ready() 方法?我添加了一个 iframe 并将检查 DOM 是否已经就绪。
3个回答

4

您可以创建一个延迟的命令,在浏览器事件循环返回时执行。

boolean ready=false;
public void onModuleLoad() {
    Scheduler.get().scheduleDeferred(new ScheduledCommand() {
        @Override
        public void execute() {
            ready=true;
            Window.alert(ready+"");    
        }
    });
    for (int i=0;i<9999;i++){
        RootPanel.get().add(new Label(ready+""));
    }
}

这个例子会在DOM中放置9999个标签,只有在放置完之后才会弹出"true"。


你能解释一下这如何帮助我找出iframe中是否触发了domready吗? - Andreas Köberle
我认为这个问题并不是特别关于捕获domready事件的。关于你的评论,我认为你可以使用javascript来捕获事件,并使用JSNI在事件触发时调用GWT方法。 - pistolPanties
当然我可以用JSNI实现,但问题是关于GWT内置解决方案的。 - Andreas Köberle

4

document.ready()与您的GWT EntryPoint中的onModuleLoad()方法类似。它们都会在文档准备好时执行。


但我不想启动一个新应用程序,我只是想查看iframe的DOM是否已经准备就绪。 - Andreas Köberle
我假设你的GWT代码在iframe中(因此当它准备好时将调用其onModuleLoad方法)。我不确定你想要做的事情(等待iframe准备就绪)是否可能,只要你无法从iframe内运行javascript。至少,我非常确定这不会可靠地工作(即使使用jQuery也不行)。在this answer中有一个类似的情况,看起来在Chrome中不起作用。 - Chris Lercher
在JavaScript中应该没有问题。我可以获取iframe的window对象并向其添加事件。请参见https://dev59.com/hHVC5IYBdhLWcg3wtzkQ#205221 - Andreas Köberle
你应该用Chrome测试一下。当我尝试给一个iframe添加onload属性时,Chrome(与其他所有浏览器不同)总是立即触发事件,远早于整个内容加载完成。(我让服务器缓慢发送内容,所以这一点非常明显。) - Chris Lercher
不是关于onload事件,而是关于domcontentloaded。我正在寻找。 - Andreas Köberle

0
其实不太适合:这种编程范式在Java中并不翻译得很好。你可能只需引入jQuery或Zepto,并使用其中一个的ready函数即可。

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