JavaScript加载顺序

JavaScript加载顺序,javascript,google-maps,activemq,Javascript,Google Maps,Activemq,我同时使用(ActiveMQ)和。我按此顺序加载脚本 <head> <meta http-equiv="content-type" content="text/html;charset=UTF-8" /> <title>AMQ & Maps Demo</title> <!-- Stylesheet --> <link rel="stylesheet" type="text/css" hre

我同时使用(ActiveMQ)和。我按此顺序加载脚本

<head>
    <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
    <title>AMQ & Maps Demo</title>

    <!-- Stylesheet -->
    <link rel="stylesheet" type="text/css" href="style.css"></link>

    <!-- Google APIs -->
    <script type="text/javascript" src="http://www.google.com/jsapi?key=abcdefg"></script>

    <!-- Active MQ -->
    <script type="text/javascript" src="amq/amq.js"></script>
    <script type="text/javascript">amq.uri='amq';</script>

    <!-- Application -->
    <script type="text/javascript" src="application.js"></script>
</head>

AMQ和地图演示
amq.uri='amq';
然而,在我的application.js中,它可以很好地加载贴图,但在尝试使用AMQ订阅主题时,我会遇到一个错误。AMQ依赖于原型,Firefox中的错误控制台称该原型未定义对象。我认为在脚本加载完成之前使用amq对象有问题在我的应用程序.js中使用这两个脚本之前,是否有办法确保加载它们?

Google有一个很好的函数调用
Google.setOnLoadCallback(初始化)效果很好。我不确定amq.js是否有类似的内容

是否有办法确保在使用这两个脚本之前加载它们?


将最后加载的代码(你的
application.js
stuff)放入原型中。这应该确保代码只有在原型+其他东西完成并准备好之后才能加载。(如果您熟悉jQuery,此函数类似于jQuery的
$(document)。ready

在jQuery中,您可以使用:

$(document).ready(function(){/*do stuff here*/});
这可以确保javascript已加载,dom已准备就绪,然后再进行操作

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

document.observe("dom:loaded", function() {/*do stuff here*/});
如果我正确理解你的问题。。我想那可能会有帮助

如果您不想依赖lib来完成此操作。。。我认为这可能有效:

<script>
   function doIt() {/*do stuff here*/}
</script>
<body onLoad="doIt();"></body>

函数doIt(){/*在此处执行操作*/}
AMQ依赖于原型,FireFox中的错误控制台称该原型未定义对象

你的意思是AMQ取决于?在您提供的代码中,我看不到该库的导入

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

JavaScript文件应该按顺序加载并阻塞,因此除非您所依赖的脚本正在执行一些不寻常的操作,否则您需要做的就是在其他文件之后加载application.js

有一些关于脚本如何加载的信息(并讨论了一些颠覆阻塞的技术)

你的意思是AMQ取决于 原型库?我看不到一只猫 在代码中为该库导入 你已经提供了

是的,ActiveMQ的javascript(amq.js)确实依赖于原型。在amq.js中,它加载3个脚本,_amq.js、behavior.js和prototype.js

感谢您在JavaScript加载顺序wrumsby上提供的帮助。这告诉我我的虫子在另一座城堡里:(


我想我有一个不同的问题。我还检查了ActiveMQ 5.0到5.1的js文件,发现它们也是一样的。5.0到5.1中的某些内容发生了变化,需要刷新主题才能订阅。我会继续查找,但感谢您消除了这个可能的原因。

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


我希望这会对将来的人有所帮助。

跨域脚本是在站点本身的脚本之后加载的,这就是为什么会出现错误。有趣的是,这里没有人知道这一点。

您也可以使用内置的SharePoint javascript方法来控制脚本的执行

_spBodyOnLoadFunctionNames.push("yourFunction");

谢谢你的评论。在将我的脚本移动到同一个域后,没有其他问题了。在“Considerr good Response”中有错误吗():“Javascript保证按照它在HTML中出现的顺序运行,所以在尝试将其附加到事件之前,只需确保定义了函数。”?这似乎是不可能的,因为从Google的CDN加载jQuery是一种相当普遍的做法,然后有自己的本地脚本需要jQuery。刚刚在Chrome和Firefox的最新版本中测试了这一点,但在这两个版本中都不正确。这也与MDN相矛盾(请参阅)-1;你没有为你的说法提供任何证据,我不相信这是真的。它是否确保加载了javascript和dom,或者只是dom?还值得一看API和其他在并行加载javascript文件和其他资源时执行相同操作的API。
_spBodyOnLoadFunctionNames.push("yourFunction");