Dojo addOnLoad,但 Dojo 是不是已加载?
Posted
技术标签:
【中文标题】Dojo addOnLoad,但 Dojo 是不是已加载?【英文标题】:Dojo addOnLoad, but is Dojo loaded?Dojo addOnLoad,但 Dojo 是否已加载? 【发布时间】:2009-01-21 21:48:48 【问题描述】:我遇到了看似鸡与蛋的问题,并且有我认为合乎逻辑的解决方案。然而,我突然想到其他人一定遇到过类似的事情,所以我想我会把它浮在外面给大众看。
情况是我想使用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 所做的工作相同脚本块。当然,这引出了一个问题,如果您不能保证 Dojo 库在使用库之前会被加载,为什么还要使用 dojo.addOnLoad?
希望这种情况对我以外的其他人有意义。似乎其他人可能遇到过这种情况。
想法?
最好的问候, 亚当·赖斯
【问题讨论】:
【参考方案1】:你做得对。外部 Javascript 文件按顺序同步加载和执行,因此当它到达您的dojo.addOnLoad( ... );
Dojo 时,它已经加载。使用dojo.addOnLoad
而不是window.onload
有两个原因:
dojo.require
的异步加载,方法是推迟执行,直到所有必需的脚本都已读取
在 DojoCampus 中解释为 (dojo.addOnLoad):
dojo.addOnLoad 是一个基本方面 使用 Dojo。传递 addOnLoad 一个 函数将函数注册到 当 Dom 准备好时运行。这 与 document.ready 略有不同 和 body.onload 在那个 addOnLoad 等到所有 dojo.require() (和 他们的递归依赖)有 发射前加载。
【讨论】:
【参考方案2】:这可能与您的问题无关,但我只是遇到了一个我有相同症状的案例。对我来说,一切都适用于 Firefox、Chrome 等,但不适用于 IE8。
我得到了看起来像 dojo 没有被加载的东西,IE8 中的一个错误说 dojo 是未定义的(但不是所有时间),我可以将所有内容简化为样式表并导入 dojo,但仍然得到错误。
我正在运行一个本地谷歌应用引擎开发服务器。这看起来是基于 python 的 SimpleHTTPServer,而后者又使用了 SocketServer.BaseServer。这有 BaseServer.request_queue_size 默认为 5 - 我在应用引擎中找不到任何覆盖该值的东西,所以我猜开发谷歌应用引擎服务器的上限为 5 个连接。
使用 regedit 并转到 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings
“MaxConnectionsPerServer”=dword:00000010 “MaxConnectionsPer1_0Server”=dword:0000010
这表明 IE 将尝试打开最多 10 个同时连接。我编辑了这两个键并将它们设为 2 并重新启动计算机,问题就消失了。
【讨论】:
以上是关于Dojo addOnLoad,但 Dojo 是不是已加载?的主要内容,如果未能解决你的问题,请参考以下文章