0

问题是,我将 Annotorious 添加到我的 openSeadragon 项目中。 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();" 到我的代码。查看器将无法运行。

这两者之间有冲突吗?如果是这样,如何解决?

4

3 回答 3

0

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

  • 调用init(反过来调用anno.makeAnnotatable
  • 异步加载anno.makeAnnotatable可用的 JavaScript

您不能在该函数存在之前调用它。您必须延迟调用,直到触发init的 JS 加载完成。downloadJSAtOnload(具体取决于如何downloadJSAtOnload工作)。

于 2016-03-28T10:45:58.033 回答
0

我认为这应该有所帮助:

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

这个想法是保持处理程序与 HTML 绑定并调用两者:html- 和 js- 处理程序。

于 2016-03-28T09:20:55.143 回答
0

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

  1. 如果您设置 body onload="_fn" 它将在页面加载时起作用
  2. 如果您在页面脚本顶部(在 body 标记之前)添加 window.onload=_fn,它们都将加载(2 然后 1)
  3. 如果您将在 HTML 的最底部区域添加 window.onload。它将是唯一在页面加载时执行的。(正文“onload”将被覆盖)
  4. 向窗口添加事件侦听器 - 您可以根据需要添加任意数量,它们将分别按顺序加载。
于 2016-03-28T10:41:54.327 回答