HTML的“onload()”是否与加载javascript的延迟相冲突?

时间:2016-03-28 08:58:51

标签: javascript jquery html openseadragon

问题是,我正在为我的openSeadragon项目添加Annotorious。 http://annotorious.github.io/demos/openseadragon-preview.html 让这个插件开始,以下是选项。

<script>
  function init() {
    anno.makeAnnotatable(document.getElementById('myImage'));
  }
</script>
...
<body onload="init();">
  <img src="example.jpg" id="myImage" />
</body>

这是问题所在,我使用这些来延迟在查看器块上加载javascript。

<script type="text/javascript">
 if (window.addEventListener)
        window.addEventListener("load", downloadJSAtOnload, false);
    else if (window.attachEvent)
        window.attachEvent("onload", downloadJSAtOnload);
    else window.onload = downloadJSAtOnload;
</script>
一旦我添加onload =“init();”我的代码。查看器将无法运行。

这两者之间是否存在冲突?如果是这样,如何解决?

3 个答案:

答案 0 :(得分:0)

我认为这应该有所帮助:

<script type="text/javascript">
 var htmlOnLoad = window.onload;
 window.onload = function(e){htmlOnLoad(e); downloadJSAtOnload(e)};
</script>

这个想法是让处理程序与HTML绑定并同时调用:html-和js-处理程序。

答案 1 :(得分:0)

Onload行为如下: (可能取决于浏览器类型 - 行为可能会改变 - 我在chrome上工作)

  1. 如果你设置body onload =“_ fn”它将适用于页面加载
  2. 如果你在页面脚本(在正文标记之前)添加window.onload = _fn,它们都会加载(2然后是1)
  3. 如果要在HTML的最底部区域添加window.onload。它将是唯一一个在页面加载时执行的。 (正文“onload”将被覆盖)
  4. 向窗口添加事件侦听器 - 您可以根据需要添加它们,它们将分别按顺序加载。

答案 2 :(得分:0)

当加载事件触发时,您正在尝试做两件事:

  • 致电init(反过来,拨打anno.makeAnnotatable
  • 异步加载使anno.makeAnnotatable可用的JavaScript

在功能存在之前,您无法调用该功能。您必须延迟调用init,直到加载downloadJSAtOnload触发器已完成的JS。 (具体情况取决于downloadJSAtOnload的工作原理)。