JS: Дождаться загрузки библиотеки на странице?

На странице "A" я подгружаю страницу "B" через фреймворк "fancybox".
Функция "showRecaptcha" вызывается до того успевает загрузится библиотека "lib.js". Следовательно никакого эффекта от вызова функции нет.
Если разместить содержимое "lib.js" на странице "B" в тегах "script" до вызова функции то всё работает нормально.
Как я могу указать вызов функции только после загрузки библиотеки на странице?
Структура страницы 'B'

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script type="text/javascript" src="http://site/lib.js"></script>
</head>
<body>
<script type="text/javascript">
$(document).ready(function(){
function showRecaptcha(element) {Recaptcha.create("333",element, {theme: "white"});
}
showRecaptcha('box');
});
</script>
<div id="box"></div>
</body>
</html>



P.S. Если просто открыть страницу "B" не используя ajax (фреймворк fancybox) - всё подгружается до того как вызывается функция.
  • Вопрос задан
  • 4791 просмотр
Решения вопроса 1
viktorvsk
@viktorvsk
Как вариант, Вы можете подключить стороннюю библиотеку динамически и дождаться ее загрузки с помощью onreadystatechange
<script>
function loadJS(src, callback) {
    var s = document.createElement('script');
    s.src = src;
    s.async = true;
    s.onreadystatechange = s.onload = function() {
        var state = s.readyState;
        if (!callback.done && (!state || /loaded|complete/.test(state))) {
            callback.done = true;
            callback();
        }
    };
    document.getElementsByTagName('head')[0].appendChild(s);
}
loadJS('/script/script.js', function() { 
    // put your code here to run after script is loaded
});
</script>

Источник: stackoverflow.com/questions/8586446/dynamically-lo...
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
demimurych
@demimurych
Не очень понял как у вас может нормально сработать открытие страницы B если нигде нет подгрузки jquery

или у вас jquery часть lib.js?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы