Мне особенно нравится возможность требовать другие классы javascript с помощью Google Closure, но мне интересно, можно ли использовать goog.require для ленивой загрузки других классов javascript. Когда я пытаюсь использовать goog.require после загрузки страницы, кажется, что она обновляется или становится пустой :( Любой способ получить скрипт по запросу и, возможно, настроить его с обратным вызовом, чтобы я мог запустить некоторый javascript, когда он загрузится ?
Закрытие пользователя Google для ленивой загрузки javascript
Ответы (2)
Менеджер модулей библиотеки закрытия:
https://github.com/google/closure-library/blob/master/closure/goog/module/modulemanager.js
goog.require
не предназначен для загрузки какого-либо скрипта. Однако нет ничего особенного в ленивой загрузке файлов сценариев по запросу. Просто создайте узел динамически и добавьте его на свою страницу:
function require(src)
{
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = src;
document.body.appendChild(script);
}
Вышеупомянутая функция загрузит скрипт с URL-адреса, указанного параметром src
.
Обратный звонок — это отдельная история. Вы не получаете событие, запущенное после загрузки скрипта. Если вы хотите получать уведомления о загрузке скрипта, вам нужно уведомить о загруженном скрипте из самого скрипта. Например, вы можете вызвать предопределенную функцию на своей странице в качестве последнего оператора в загружаемом файле javascript. Как только эта функция вызывается, вы знаете, что скрипт завершил загрузку. Однако для этого вам необходимо иметь возможность изменять загруженный файл сценария.
Аналогичный подход для уведомления о загрузке скрипта используется с JSONP. Данные JSONP извлекаются с использованием того же подхода, что и выше — вы добавляете на страницу динамически созданный узел скрипта. Однако по умолчанию возврат данных с сервера не приводит к изменению состояния. Вызов функции необходим, чтобы указать, что что-то произошло (например, данные прибыли). При использовании JSONP вы указываете имя функции в URL-адресе запроса JSONP. Затем сервер возвращает фрагмент javascript, в котором вызывается указанная вами функция, передавая данные JSON в качестве аргумента.
Все это говорит о том, что вам нужно иметь возможность вызывать функцию на странице после загрузки скрипта.