Динамически и синхронно загружайте файл JavaScript из другого домена - PullRequest
5 голосов
/ 16 февраля 2011

Я хотел бы синхронно включить файл JavaScript из другого домена с помощью кода. Это означает, что использование синхронного XMLHttpRequest не будет работать. Я также хочу избежать document.write, потому что мой код будет выполнен, когда документ будет полностью загружен. Это вообще возможно? Поддерживает ли какая-либо из существующих библиотек JavaScript эту функцию?

В основном я хочу, чтобы это работало:

<script type="text/javascript">
  $(document).ready(function() {
      load("path_to_jQuery_UI_from_another_domain");
      console.log(jQuery.ui.version); //outputs the version of jQuery UI
  });
</script>

EDIT: Моя идея заключается в создании плагина jQuery, который загружает свои файлы JavaScript на основе включенных функций. Плагины jQuery могут быть инициализированы в любое время, что означает отсутствие document.write. Совершенно нормально загружать файлы JavaScript асинхронно, но люди ожидают, что их плагины будут полностью инициализированы после вызова $("selector").something();. Отсюда необходимость синхронной загрузки JavaScript без document.write. Я думаю, я просто хочу слишком много.

Ответы [ 5 ]

8 голосов
/ 17 февраля 2011

Единственный способ синхронной загрузки файлов - это документирование тега скрипта на вашей странице. Это обычно считается плохой практикой. Возможно, есть лучший способ сделать то, что вы действительно хотите, но в духе прозрачности:

document.write('<script src="http://otherdomain.com/script.js"></'+'script>')

должен сделать свое дело. Вы должны экранировать закрывающий тег script, чтобы анализатор не закрывал тег script, который вы написали.

** Обратите внимание, что вы не можете динамически загружать сценарии, содержащие document.write

3 голосов
/ 16 февраля 2011

Вы можете использовать .getScript ()

Редактировать: междоменные запросы всегда загружаются асинхронно в jQuery.

1 голос
/ 16 февраля 2011

Существует отличная библиотека с именем YepNope для загрузки зависимостей javascript из любого места, разработанная участником подкаста yayQuery. Его можно найти здесь: http://yepnopejs.com/

0 голосов
/ 07 августа 2013

LABjs.js, хорошая библиотека. Я использовал это работает хорошо.

http://labjs.com/

0 голосов
/ 17 февраля 2011

Невозможно синхронно выполнить скрипт по URL.Отметим далее, что синхронное что-либо, когда задействованы сети (или даже файловые системы!), Является плохой идеей.Кто-то, когда-нибудь, где-то будет в медленной системе, в медленной сети, или в обеих, и вдруг вы просто повесили их пользовательский интерфейс в процессе.

Синхронный - это плохо.Асинхронность с обратными вызовами хороша.

Обратите внимание, что в качестве наихудшего хака вы можете перезаписать $ своей собственной функцией, которая возвращает объект только с правильными свойствами, и вы можете поленизко оценитьвсе актуальные звонки.Это, конечно, ломается, если вы начинаете полагаться на немедленное выполнение вызовов или на их выполнение, смешанное с оценкой аргументов, но в худшем случае это не совсем неправдоподобно.

...