2016-03-28 2 views
0

Дело в том, что я добавляю Annotorious к моему проекту openSeadragon. http://annotorious.github.io/demos/openseadragon-preview.html для запуска этих плагинов. Ниже приведены параметры.«Работает onload()» в HTML конфликтует с задержкой загрузки 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

Вы используете anno.makeAnnotatable внутри функции init .. является соответствующей библиотекой, связанной с тем, что было включено на вашей странице до этого ?. –

+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 = «_ п» будет работать на странице нагрузок
  2. Если вы добавите window.onload = _fn поверх скрипта страницы (перед тегом body), они будут загружать (2, затем 1)
  3. Если вы добавите window.onload в самую нижнюю область HTML , Он будет единственным, который будет выполняться при загрузке страницы. (тело «onload» будет отменено)
  4. Добавление прослушивателя событий в окно - вы можете добавить столько, сколько вам нужно, и все они будут загружены, как указано соответственно.
0

Когда событие загрузки выстреливает вы пытаетесь сделать две вещи:

  • Вызов init (который, в свою очередь, вызывает anno.makeAnnotatable)
  • Асинхронная загрузка JavaScript, который делает anno.makeAnnotatable доступной

Вы не можете вызвать функцию до ее существования. Вы должны отложить вызов init до тех пор, пока загрузка JS не завершится, чтобы триггеры downloadJSAtOnload. (Специфика этого зависит от того, как работает downloadJSAtOnload).

+0

Я положил downloadJSAtOnload в нижней части тела и вызвал init таким образом: . Значит, вы говорите, что это неправильный порядок? –

+0

@ ho.yq - Не совсем. Я говорю, что downloadJSAtOnload является асинхронным. – Quentin

+0

@ ho.yq - Как вы решаете это зависит от того, как работает 'downloadJSAtOnload'. – Quentin