Динамически загружать JavaScript с помощью JavaScript - PullRequest
4 голосов
/ 29 апреля 2011

После часа попыток заставить его работать, я думаю, что это из-за междоменных политик, но я действительно думал, что это будет работать.Я также не могу найти много информации об этом.Но вот моя проблема.У меня есть сайт с именем http://mysite.com, а затем я включаю сторонний скрипт (то, что я пишу) и его на http://supercoolsite.com/api/script.js, и этот скрипт должен динамически загружать API карт Google на: http://maps.google.com/maps/api/js?sensor=false до запускаНу, я подумал, что этот код будет работать:

function loadScript(filename,callback){
  var fileref=document.createElement('script');
  fileref.setAttribute("type","text/javascript");
  fileref.setAttribute("src", filename);
  fileref.onload = callback();
  if (typeof fileref!="undefined"){
    document.getElementsByTagName("head")[0].appendChild(fileref)
  }
}

loadScript('http://maps.google.com/maps/api/js?sensor=false',function(){
  console.log('done loading');
  init();
});

Но мой ответ в моей консоли:

api.js:408 done loading
api.js:115 test
api.js:310 Uncaught ReferenceError: google is not defined

"test" находится наверху init(),Итак, он загружает скрипт, но, похоже, не выполняет его.Итак, есть идеи?Если это проблема межсайтового скриптинга, мой единственный способ исправить это, о котором я мог подумать, это иметь PHP-скрипт на нашем конце, который в основном просто устанавливает заголовок на заголовок text / javascript и затем echo file_get_contents() в googlemaps.php файлхост.Собираюсь попробовать это, как мы говорим, но, если возможно, способ сделать это с помощью чистого JS был бы замечательным.

PS Я также пытался добавить jQuery, затем сделал getScript(), и он все еще не работал

- ОБНОВЛЕНИЕ -

См. Эту скрипку: http://jsfiddle.net/ycMCa/2/

Вы увидите, что вы получите ошибку в своей консоли: Uncaught TypeError: undefined is not a function

Несмотря на то, что переменная google является глобальной.

1 Ответ

7 голосов
/ 29 апреля 2011

У вас просто небольшая ошибка:

fileref.onload = callback();

Это немедленно вызовет callback и присвоит возвращаемое значение fileref.onload.

Это должноbe

fileref.onload = callback;

Вы также должны добавить обработчик перед установкой источника (на всякий случай).

DEMO

...