Dojo addOnLoad,但是Dojo加载了吗?

时间:2009-01-21 21:48:49

标签: dom dojo onload

我遇到过像鸡一样的东西。鸡蛋问题,我认为这是一个合乎逻辑的解决方案。然而,在我看来,其他人肯定遇到过类似的东西,所以我想我会把它漂浮在那里为群众。

情况是我想使用dojo的addOnLoad函数来排队一些回调,这些回调应该在DOM完成客户端渲染之后执行。所以我正在做的事情如下:

<html>
    <head>
        <script type="text/javascript" src="dojo.xd.js"></script>
        ...
    </head>
    <body>
        ...
        <script type="text/javascript">
            dojo.addOnLoad( ... );
            dojo.addOnLoad( ... );
            ...
        </script>
    </body>
</html>

现在,问题是我似乎在整个Dojo库下载浏览器之前调用了dojo.addOnLoad。这在某种程度上是有道理的,因为内嵌的SCRIPT内容应该在加载整个DOM之前执行(并触发正常的主体onload回调)。

我的问题是这个 - 是我的方法声音,还是更有意义的是注册一个普通的/标准的onload JavaScript回调来调用一个函数,这与dojo.addOnLoads中每个dojo.addOnLoads做的工作相同SCRIPT块。当然,这就引出了一个问题,如果您不能保证在使用库之前加载Dojo库,为什么还要使用dojo.addOnLoad?

希望这种情况对我以外的人有意义。好像其他人可能遇到过这种情况。

思想?

最诚挚的问候, 亚当·赖斯

2 个答案:

答案 0 :(得分:12)

你正确地做到了。外部Javascript文件按顺序同步加载和执行,因此当它到达您的dojo.addOnLoad( ... ); Dojo时已加载。使用dojo.addOnLoad代替window.onload有两个原因:

  • 它之前触发,因为它使用了DOMContentLoaded
  • 通过推迟执行直到读取了所有必需的脚本来处理dojo.require的异步加载

在DojoCampus中解释为(dojo.addOnLoad):

  

dojo.addOnLoad是一个基本方面   使用Dojo。传递addOnLoad a   函数会将函数注册到   在Dom准备好的时候跑。这个   与document.ready略有不同   和addOnLoad中的body.onload   等到所有dojo.require()(和   他们的递归依赖)   在开火前加载。

答案 1 :(得分:-5)

这可能与你的问题无关,但我只是遇到了一个我有相同症状的情况。对我来说,一切都适用于Firefox,Chrome等,但不适用于IE8。

我得到的东西似乎没有被加载,IE8中的错误说dojo未定义(但不是所有的时间)我可以将所有内容都删除到样式表并导入dojo并仍然得到错误。< / p>

我正在运行本地Google应用引擎开发服务器。这看起来基于pythons SimpleHTTPServer,后者又使用SocketServer.BaseServer。这有BaseServer.request_queue_size,默认为5 - 我在app引擎中找不到任何超出此值的内容,所以我猜开发谷歌应用引擎服务器的上限为5个连接。

使用regedit并转到HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings

“MaxConnectionsPerServer的” = DWORD:00000010 “为MaxConnectionsPer1_0Server” = DWORD:0000010

这表明IE将尝试打开多达10个同时连接。我编辑了这两个键,然后将它们重新设置为2并重新启动计算机,问题就消失了。