2016-03-28 25 views
0

事情是,我在我的openSeadragon项目中添加了Annotorious。 http://annotorious.github.io/demos/openseadragon-preview.html 得到这个插件启动,以下是选项。HTML的“onload()”与加载JavaScript的延迟有冲突吗?

<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();”对我的代码。查看器将不起作用。

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

+0

您在init函数中使用anno.makeAnnotatable ..是与之前的页面相关的相关库吗? –

+0

是的,这是。@ techie_28 –

+0

打开您的浏览器控制台并重新加载页面,看看是否有任何JS错误。 –

回答

0

我认为这应该帮助:

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

这样做是为了保持与HTML绑定的处理程序和通话双方:在HTML和js-处理程序。

+0

这没有帮助。这会尝试使用脚本创建的对象,这些脚本不仅没有完成下载,而​​且还没有开始下载。这将抛出一个异常,所以'downloadJSAtOnload'甚至不会运行。 – Quentin

+0

哪些脚本尚未完成下载?这里唯一的假设是定义了函数downloadJSAtOnload。 – ptrk

+0

- 'downloadJSAtOnload'导致下载并且'htmlOnLoad'依赖的那些。 – Quentin

0

的Onload行为就像这样: (可能依赖于浏览器类型 - 行为将可能会改变 - 我的工作铬)

  1. 如果设置身体的onload =“_ FN”它将在页面加载工作
  2. 如果您在页面脚本顶部添加window.onload = _fn(在body标签之前),它们将同时加载(2然后是1)
  3. 如果您将在HTML的最底部区域添加window.onload 。它将是唯一一个在页面加载时执行的。 (主体“onload”将被覆盖)
  4. 将一个事件监听器添加到窗口中 - 您可以根据需要添加它们,它们将按照顺序分别加载。
0

当负载事件触发你正在尝试做的两件事情:

  • 呼叫init(这反过来,调用anno.makeAnnotatable
  • 异步加载JavaScript这使得anno.makeAnnotatable提供

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

+0

我把downloadJSAtOnload放在body的底部,并以这种方式调用init:。所以你说这是错误的顺序? –

+0

@ ho.yq - 不完全。我在说downloadJSAtOnload是异步的。 – Quentin

+0

@ ho.yq - 你如何解决它取决于'downloadJSAtOnload'的工作方式。 – Quentin