我有一个JS脚本将托管在我的服务器上,其他人将嵌入他们的html中,即
...<code for http://yoursite.com />
<script type="text/javascript" src="http://mysite.com/awesome.js" />
...<code for http://yoursite.com />
我的脚本声明了一个对象,其中包含一组可用作javascript Object()的属性,即
<script type="text/javascript">
//From http://mysite.com/awesome.js
alert(Awesome.Name);
</script>
由于加载时间差异,我似乎需要发出信号,表示我的脚本中的“Awesome”对象已准备就绪。我需要它自己站立,所以不依赖于特定的JS框架。
我是否需要发布自己的自定义JS事件,或者我的脚本加载的简单事实是否会被现有的页面级事件之一捕获?我还应该怎么做呢?
更新:作为参考点,如果我将JS包含在从“http://mysite.com”运行的HTML页面中,则可以使用并填充Awesome对象。当JS文件包含在另一个域中时,该对象在运行时未定义。
答案 0 :(得分:5)
<script>
标记的javascript内容是按程序执行的,所以
<script type="text/javascript" src="http://mysite.com/awesome.js" />
<script type="text/javascript">
alert(Awesome.Name);
</script>
只会在{em>之前的脚本代码中找到Awesome.Name
的内容。
要了解页面上是否已完全加载所有内容,您必须使用DOMContentLoaded(对于firefox)和“onreadystatechange”(对于ie)。如果您不关心检查DOM(可能更容易),也可以在窗口对象上查看加载事件。
if ( document.addEventListener ) {
document.addEventListener( "DOMContentLoaded", function(){
doSomething();
}, false );
} else if ( document.attachEvent ) { // IE
document.attachEvent("onreadystatechange", function(){
if ( document.readyState === "complete" ) {
doSomething();
}
});
}
答案 1 :(得分:1)
如果您的脚本需要在实例化对象之前加载DOM,那么您应该查看一些框架并查看它们如何处理它,然后在您的代码中实现它。如果您不需要加载DOM,那么我会让用户担心根据加载时间来使用对象的时间。通常,您的对象应该可以在加载脚本后立即使用,这意味着该对象应该在包含它的script
标记之后立即可用。
答案 2 :(得分:1)
可以通过window
范围访问全局范围内可访问的任何内容。因此,你可以使用它:
if (window["Awesome"] != null) { /* do something */ }
答案 3 :(得分:0)
A)。你意识到脚本请求是阻塞的吗?你对这个没问题,或者你想解决这个问题,因为问题的答案取决于它。
B)。裸骨防弹和简单机制是调用指定的方法,您可以保证在页面上存在。让方法实现取决于用户做什么。存在许多其他方法,但我们需要知道代码的生命周期和意图到底是什么建议。
答案 4 :(得分:0)
你可以这样简单地使用它:
<script type="text/javascript" src="myfunction.js"></script>
<script type="text/javascript" src="iwannaloadthis.js?onload=executeThis"></script>
请记住,如前所述,执行此操作必须在myfunction.js中定义(或在尝试加载iwannaloadthis.js之前。
希望这会有所帮助!!