2015-10-07 2 views
3

У меня есть API, который использует несколько моих клиентов, используя мои собственные спецификации и инструкции по управлению им со своих сайтов. Это означает, что, к сожалению, для меня изменение кода HTML на их стороне не является вариантом. Это общая идея, как их код выглядит, и мне нужно, чтобы сделать его еще работать после того, как я делаю изменения я хочу:Задержка срабатывания события onload

<script src="player.js"></script> 
<script> 
    console.log(player.someProperty); 
</script> 

Я хочу сделать следующие изменения:

  • переименовывать player.js to player_2.0.js
  • создайте небольшой скрипт, который будет называться player.js, поэтому HTML5 вверху будет работать так, как раньше. Тогда player.js будет динамически загружать player_2.0.js.

Проблема заключается в том, когда следующая часть кода получает быть exectuded

<script> 
    console.log(player.someProperty); 
</script> 

player_2.0.js еще не сделали загрузку, в результате player.someProperty быть неопределенным.

Итак, мой вопрос в том, могу ли я манипулировать или откладывать событие onload для скрипта player.js, пока не будет выполнена загрузка player_2.0.js, или сделайте все, что могло бы заставить меня выполнить это.

+0

Если проигрыватель.js загружает player_2.0.js динамически, вам нужно загрузить этот скрипт, который использует player.someProperty, динамически загруженный player.js. – YOU

+0

Это не срабатывает после 'onload'. Он запускается, когда браузер анализирует тег 'script'. – MinusFour

+0

@YOU, но это не будет под контролем скриптов. – Rayon

ответ

2

Вы загружаете player_2.0.js асинхронно, поэтому нижеприведенный код не может получить доступ player.someProperty.

Существует старая и уродливая техника для синхронной загрузки, которая использует Document.write()

Короче:

<script type="text/javascript"> 
    document.write('<script type="text/javascript" src="other.js"></script>'); 
</script> 

<script type="text/javascript"> 
    functionFromOther(); 
</script> 

document.createElement(“script”) synchronously см для более подробной информации.

Это очень плохо, потому что вы заблокируете загрузку других ресурсов, и вы не можете вводить этот сценарий динамически без iframes.

Я предпочел бы использовать технику под названием Friendly Iframes, но для этого потребуются некоторые изменения в вашем публичном API.

+0

Это может быть плохо в большинстве случаев, но в моем случае это именно то, что мне нужно. Благодарю. – arhonthhh

Смежные вопросы