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

jro*_*jro 3 javascript unobtrusive-javascript javascript-events

我有一个JS脚本将托管在我的服务器上,其他人将嵌入他们的html,即

...<code for http://yoursite.com />
<script type="text/javascript" src="http://mysite.com/awesome.js" />
...<code for http://yoursite.com />
Run Code Online (Sandbox Code Playgroud)

我的脚本声明了一个对象,其中包含一组可用作javascript Object()的属性,即

<script type="text/javascript">
//From http://mysite.com/awesome.js
alert(Awesome.Name);
</script>
Run Code Online (Sandbox Code Playgroud)

由于加载时间的变化,似乎我需要发信号通知我的脚本中的"Awesome"对象已准备就绪.我需要它自己站立,因此不依赖于特定的JS框架.

我是否需要发布自己的自定义JS事件,或者我的脚本加载的简单事实是否被现有的页面级事件之一捕获?我该怎么做呢?

更新:作为参考点,如果我将JS包含在从" http://mysite.com " 运行的HTML页面中,则可以使用并填充Awesome对象.当JS文件包含在另一个域中时,该对象在运行时未定义.

Luc*_*eis 5

<script>标签的javascript内容是程序执行的,所以这个

<script type="text/javascript" src="http://mysite.com/awesome.js" />
<script type="text/javascript">
    alert(Awesome.Name);
</script>
Run Code Online (Sandbox Code Playgroud)

只会提醒Awesome.Name任何先前脚本标记中的内容.

要了解页面上是否已完全加载所有内容,您必须使用DOMContentLoaded(对于firefox)和"onreadystatechange"来表示ie.如果您不关心检查DOM(也可以更容易),您也可以简单地检查窗口对象上的load事件.

if ( document.addEventListener ) {
    document.addEventListener( "DOMContentLoaded", function(){
         doSomething();   
    }, false );
} else if ( document.attachEvent ) { // IE        
    document.attachEvent("onreadystatechange", function(){
        if ( document.readyState === "complete" ) {
            doSomething();
        }
    });
}
Run Code Online (Sandbox Code Playgroud)