使用 Fancybox 加载异步

Using Fancybox loaded async

我在 onload 函数中异步加载 Fancybox 库:

function myLoad(){
    var s = document.createElement('script');
    s.type = 'text/javascript';
    s.async = true;
    s.src = 'miurl.com';
    var x = document.getElementsByTagName('script')[document.getElementsByTagName('script').length - 1];
    x.parentNode.insertBefore(s, x);
}

<body onload="myLoad()">

脚本已添加到我的脑海中,但当我尝试时:

$("#myDiv").fancybox();

执行 myLoad() 后,控制台在 fancybox 插件调用中显示 "Uncaught TypeError: undefined is not a function"。

有什么想法吗?

你的意思是调用fancybox();执行了,里面有问题。比这个功能会有帮助 ;-)

或者你的意思是 $("#myDiv") 是问题所在,因为为什么这会有一个函数 fancybox()。很难猜,你给的信息很少。

将我的评论转化为答案,因为它解决了您的问题:

您必须 "wait" 才能让脚本完成加载,然后才能尝试使用它。加载一些异步的东西意味着它将在后台加载并在稍后的某个时间完成加载,而加载过程中的其他事情继续进行。

如果 jQuery 已经可用,您可以使用 $.getScript() 并使用成功处理程序回调函数来了解加载完成的时间。

$.getScript(yourFancyBoxCodeURLHere, function() {
    $("#myDiv").fancyBox();
});