JQuery - Как проверить наличие JavaScript на странице? - PullRequest
2 голосов
/ 27 октября 2009

На html-странице, которая использует $ .getScript для динамической загрузки файлов .js.

Позже, когда я захочу проверить, загружен ли конкретный файл .js. Как это сделать?

Могу ли я проверить, используя filename.js? или мне нужно проверить объект / функцию / переменную в этом файле?

Спасибо за ответы, ребята. Вы, ребята, предложили функцию обратного вызова, глобальную переменную и т. Д. Но дело в том, что я работаю в корпоративной среде, где один корпоративный .js загружает другой .js (тот, который я пытаюсь обнаружить). Я не только не могу изменить корпоративный .js, но и не могу контролировать, когда он изменится. Я надеялся, что есть способ узнать, какой файл .js загружен на странице.

Ответы [ 7 ]

1 голос
/ 27 октября 2009

Самый быстрый способ проверить это - проверить существование функции или переменной, объявленной в загруженном вами файле JavaScript.

if(typeof foo == "undefined") {
    //JS has loaded
} else {
    //JS has not loaded
}
0 голосов
/ 09 ноября 2013

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

function callClient(){
    if (typeof myTestFunction == 'function') {
        myTestFunction();
    } else {
        alert("myTestFunction function not available");
    }
} 

Вышеизложенное извлечено из «Проверьте, доступна ли функция вызова Javascript, чтобы избежать ошибок времени выполнения»

0 голосов
/ 28 октября 2009

Взгляните на мой ответ на похожий вопрос.

0 голосов
/ 27 октября 2009

Я бы порекомендовал запустить пользовательское событие в обратном вызове, которое уведомит вас о загрузке вашего скрипта. Вам нужно будет использовать метод .bind (), чтобы связать пользовательское событие с чем-либо, и .trigger (), чтобы вызвать это событие из обратного вызова. Например, что-то вроде этого:

$('body').bind('foo', function() { 
  // do something
});
$.getScript(url, function() {
  $('body').trigger('foo');
});
0 голосов
/ 27 октября 2009

Запустите какое-либо событие в скрипте, который вы загружаете, чтобы уведомить родительский скрипт о том факте, что скрипт загружен. Храните информацию в некотором массиве в некотором глобальном классе. Напишите простую функцию, которая найдет имя файла в этом массиве - isLoaded (filename).

0 голосов
/ 27 октября 2009

Глобальный объект?

var loadedFiles = {};
$.getScript('filename.js');
loadedFiles['filename.js'] = true;

// later...

if (loadedFiles['filename.js']) {
  // Do stuff...
}

Если есть объекты, уникальные для этого JS-файла, тогда да, вы также можете просто проверить наличие объекта / функции / переменной.

EDIT - метод karim79, использующий метод onSuccess, был бы более надежным, хотя вы могли бы по-прежнему держать пространство имен результатов внутри глобального объекта.

0 голосов
/ 27 октября 2009

Полагаю, одним из способов было бы установить некоторые глобальные логические значения (или что-то еще):

var fooLoaded = false;
var barLoaded = false;

и установите их в обратном вызове $.getScript:

$(document).ready(function() {
    $.getScript("/some/script.js", function(){
      fooLoaded = true;
    });
    if(fooLoaded) {
        ...
    }
});

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...