доступ к переменной из динамически загружаемого внешнего файла JavaScript - PullRequest
3 голосов
/ 05 мая 2011

У меня загружается внешний js-файл (который я не могу изменить) с помощью document.createElement (), и мне нужно получить доступ к переменной из него. Проблема в том, что я не знаю, когда закончится загрузка. Я попробовал функцию готовности документа jQuery, но, похоже, она развернулась раньше, чем файл javascript. Я могу получить доступ к переменной, как это, хотя:

setTimeout("console.log(swifttagdiv.firstChild.firstChild.src)", 5000);

но это всего лишь тест, чтобы увидеть, является ли переменная глобальной. Есть идеи?

Ответы [ 3 ]

4 голосов
/ 05 мая 2011

Вы можете добавить скрипт, используя Javascript вместо того, чтобы поместить его на свою страницу.Таким образом, вы можете контролировать, когда он загружается.

Вот функция, которую я использую для динамического ввода кода на страницах:

    function inject(src, cb, target){
        target = target || document.body;
        var s = document.createElement('SCRIPT');
        s.charset = 'UTF-8';
        if(typeof cb === 'function'){ 
            s.onload = function(){
                cb(s);
            }; 
            s.onreadystatechange = function () {
                (/loaded|complete/).test(s.readyState) && cb(s);
            };                     
        }
        s.src = src;
        target.appendChild(s);
        return s;
    }

, чтобы использовать его:

inject('/path/to/file.js', function(script){
   //your code here
})
2 голосов
/ 05 мая 2011
var checkvarint = setInterval(function(){
  if(swifttagdiv.firstChild.firstChild.src){
    varLoaded(); clearInterval(checkvarint);
  }
},10);

function varLoaded(){
    alert("LOADED!");
    alert(swifttagdiv.firstChild.firstChild.src);
}
0 голосов
/ 05 мая 2011

Ответ микрофона великолепен.
Здесь то же самое, только менее отвлеченно, возможно, это будет поучительно

var scriptElement = document.createElement( 'script' );
scriptElement.type = "text/javascript";
scriptElement.src  = "https://ajax.googleapis.com/ajax/libs/ext-core/3.1.0/ext-core-debug.js";

function loadHandler() {
    alert( 'loaded' );
}

// for ie
scriptElement.onreadystatechange = function () {
    if( this.readyState == 'complete' ){
        loadHandler();
    }
}
// for others
scriptElement.onload= loadHandler;

document.getElementsByTagName('head')[0].appendChild( scriptElement );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...