Отложите выполнение виджета JS до полной загрузки страницы
У меня есть виджет с некоторыми пользовательскими JS:
class ImagePreviewWidget(ClearableFileInput):
...
class Media:
css = {
'all': ('css/image-preview-widget.css',)
}
js = ('js/image-preview-widget.js', )
Пользовательский js использует jQuery, который загружается независимо, поэтому мне нужно обернуть инициализацию моего модуля в:
window.onload = function() {
cusomJsStart();
};
Что не очень чисто (одна проблема в том, что я, возможно, мешаю другим window.onload
звонки). Есть ли лучший способ загрузить виджет JavaScript?
РЕДАКТИРОВАТЬ
Просто чтобы прояснить: весь смысл этого вопроса в том, что jQuery
еще не загружен при запуске скрипта, и что порядок загрузки скрипта находится вне моего контроля.
2 ответа
Вместо настройки window.onload
ты должен использовать addEventListener
:
window.addEventListener("load", customJsStart);
(Если вам нужно поддерживать IE<9, тогда требуется некоторый запасной код - см. Ссылку MDN выше).
Еще приятнее было бы, если бы вы сказали Django добавить defer
приписать сценарии, которые вы передаете в Media
класс, но это еще не поддерживает.
Нет ничего лучше, чем чистый Javascript! В качестве альтернативы вы можете использовать JQuery следующим образом:
$(function(){
cusomJsStart();
});
Но с этим методом ваша страница будет тяжелее из-за загрузки исходного файла JQuery.
Или вы можете поставить свой cusomJsStart()
в конце вашего HTML-файла, но он совсем не чистый! Вы сделали правильный выбор.