我遇到了一个看上去像鸡和鸡蛋的问题,我认为这是一个合乎逻辑的解决方案。然而,我突然意识到,其他人一定也遇到过类似的事情,所以我想我会把它抛到那里去。
情况是,我想使用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。这在某种程度上是有意义的,因为内联脚本内容应该在加载整个DOM之前执行(并且触发正常的body onload回调)。
我的问题是--我的方法是否健全,或者注册一个正常/标准的JavaScript回调体来调用一个函数是否更有意义,该函数与每个dojo.addOnLoads在脚本块中所做的工作相同。当然,这就引出了一个问题,如果不能保证在使用库之前加载Dojo库,那么为什么还要使用dojo.addOnLoad呢?
希望这种情况对我以外的人来说是有意义的。好像是其他人遇到了这种情况。
有什么想法?
向你问好,亚当·赖斯
发布于 2009-01-23 16:20:52
你做得对。外部Javascript文件按顺序同步加载和执行,所以当它到达您的dojo.addOnLoad( ... ); Dojo加载时。使用dojo.addOnLoad而不是window.onload有两个原因:
dojo.require的异步加载。在DojoCampus as (dojo.addOnLoad)中解释:
dojo.addOnLoad是使用Dojo的一个基本方面。传递addOnLoad函数将注册在Dom准备就绪时运行的函数。这与document.ready和body.onload略有不同,因为addOnLoad等待所有dojo.require() (以及它们的递归依赖项)在触发前加载。
发布于 2010-03-28 05:10:05
这可能与你的问题无关,但我刚刚遇到了同样的症状。对我来说,火狐、Chrome等浏览器一切都很好,但IE8却不行。
我得到了看起来像没有加载的dojo,IE8中的一个错误说dojo是未定义的(但不是一直都定义的),我可以将所有的东西简化为样式表并导入dojo,但仍然会得到错误。
我在运行一个本地的google应用程序引擎开发服务器。这看起来是基于pythons SimpleHTTPServer,而后者又使用SocketServer.BaseServer。这是一个默认为5的BaseServer.request_queue_size,我在应用程序引擎中找不到任何超过这个值的东西,所以我想开发google服务器有一个5个连接的上限。
使用regedit并转到HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet设置
“MaxConnectionsPerServer”=dword:00000010“MaxConnectionsPer1_0Server”=dword:0000010
这表明IE将尝试打开多达10个同时连接。我编辑了这两个键,让它们变成2个,然后重新启动计算机,问题就解决了。
https://stackoverflow.com/questions/467166
复制相似问题