Отложите выполнение виджета 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-файла, но он совсем не чистый! Вы сделали правильный выбор.

Другие вопросы по тегам