我正在使用amq.js(ActiveMQ)和谷歌地图.我按此顺序加载脚本
AMQ & Maps Demo
但是在我的application.js中它加载了地图很好但是在尝试使用AMQ订阅主题时出现错误.AMQ依赖于Firefox中错误控制台所说的对象未定义的原型.我认为在脚本加载完成之前使用amq对象时遇到问题.有没有办法确保在我的application.js中使用它们之前加载两个脚本?
Google有这个很棒的函数调用google.setOnLoadCallback(initialize);
,效果很好.我不确定amq.js有这样的东西.
跨域脚本是在站点本身的脚本之后加载的,这就是你得到错误的原因.有趣的是,这里没人知道.
有没有办法确保在我的application.js中使用它们之前加载两个脚本?
JavaScript文件应该按顺序加载并阻塞,除非您依赖的脚本正在做一些不寻常的事情,您需要做的就是在其他文件之后加载application.js.
非阻塞JavaScript下载包含有关脚本加载方式的一些信息(并讨论了一些颠覆阻塞的技术).
在jquery中你可以使用:
$(document).ready(function(){/*do stuff here*/});
这确保了javascript的加载和dom准备就绪,然后才能完成你的工作.
在原型中看起来这可能会起作用
document.observe("dom:loaded", function() {/*do stuff here*/});
如果我正确理解你的问题..我认为这可能会有所帮助..
如果您不想依赖lib来执行此操作...我认为这可能有效:
我遇到了类似的问题,只有一个脚本.我提出的解决方案是使用创建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); }
我希望这有助于将来的某些人.