加载了表示我的JS脚本的最佳方式

时间:2009-02-24 17:21:20

标签: javascript javascript-events unobtrusive-javascript

我有一个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文件包含在另一个域中时,该对象在运行时未定义。

5 个答案:

答案 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之前。

希望这会有所帮助!!