当前位置:  开发笔记 > 编程语言 > 正文

JavaScript加载顺序

如何解决《JavaScript加载顺序》经验,为你挑选了4个好方法。

我正在使用amq.js(ActiveMQ)和谷歌地图.我按此顺序加载脚本


    
    AMQ & Maps Demo

    
    

    
    

    
    
    

    
    

但是在我的application.js中它加载了地图很好但是在尝试使用AMQ订阅主题时出现错误.AMQ依赖于Firefox中错误控制台所说的对象未定义的原型.我认为在脚本加载完成之前使用amq对象时遇到问题.有没有办法确保在我的application.js中使用它们之前加载两个脚本?

Google有这个很棒的函数调用google.setOnLoadCallback(initialize);,效果很好.我不确定amq.js有这样的东西.



1> 小智..:

跨域脚本是在站点本身的脚本之后加载的,这就是你得到错误的原因.有趣的是,这里没人知道.


这似乎不太可能,因为从Google的CDN加载jQuery,然后拥有需要jQuery的自己的本地脚本是相当普遍的做法
谢谢你的评论.将我的脚本移动到同一个域后,不再有问题.
这里有一个错误(http://stackoverflow.com/questions/1307929/javascript-dom-load-events-execution-sequence-and-document-ready)在"考虑好的答案":"Javascript保证运行按照它出现在HTML中的顺序,所以只需确保在尝试将其附加到事件之前定义了您的函数."?
刚刚在最新版本的Chrome和Firefox中对此进行了测试,但两者都不是这样.它也与MDN相矛盾(参见https://developer.mozilla.org/en/docs/Web/HTML/Element/script).-1; 你没有提供任何证据证明你的主张,我不相信这是真的.

2> Walter Rumsb..:

有没有办法确保在我的application.js中使用它们之前加载两个脚本?

JavaScript文件应该按顺序加载并阻塞,除非您依赖的脚本正在做一些不寻常的事情,您需要做的就是在其他文件之后加载application.js.

非阻塞JavaScript下载包含有关脚本加载方式的一些信息(并讨论了一些颠覆阻塞的技术).



3> danb..:

在jquery中你可以使用:

$(document).ready(function(){/*do stuff here*/});

这确保了javascript的加载和dom准备就绪,然后才能完成你的工作.

在原型中看起来这可能会起作用

document.observe("dom:loaded", function() {/*do stuff here*/});

如果我正确理解你的问题..我认为这可能会有所帮助..

如果您不想依赖lib来执行此操作...我认为这可能有效:





4> cmcginty..:

我遇到了类似的问题,只有一个脚本.我提出的解决方案是使用创建addEventListener("load",fn,false)script对象.document.createElement('script')这是最后一个加载任何标准JS文件的函数,并允许您添加"后加载"脚本.

function addJavaScript( js, onload ) {
   var head, ref;
   head = document.getElementsByTagName('head')[0];
   if (!head) { return; }
   script = document.createElement('script');
   script.type = 'text/javascript';
   script.src = js;
   script.addEventListener( "load", onload, false );
   head.appendChild(script);
}

我希望这有助于将来的某些人.

推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有