延迟小部件 js 的执行,直到页面完全加载

Defer execution of widget js until page is fully loaded

我有一个带有一些自定义 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尚未加载,脚本加载顺序不在我的控制范围内。

没有什么比纯粹的Javascript更好的了!或者你可以像这样使用 JQuery :

$(function(){
   cusomJsStart();
});

但是由于 JQuery 源文件加载,使用此方法您的页面会更重。

或者您可以将 cusomJsStart() 放在 HTML 文件的末尾,但它一点也不干净! 你的选择是对的。

您应该使用 addEventListener:

而不是设置 window.onload
window.addEventListener("load", customJsStart);

(如果您需要支持 IE<9,则需要一些后备代码 - 请参阅上面的 MDN link)。

如果您可以告诉 Django 将 defer 属性添加到您在 Media class 中传递的脚本,那就更好了,但它还不支持。