3

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

...<code for http://yoursite.example.com />
<script type="text/javascript" src="http://mysite.example.com/awesome.js" />
...<code for http://yoursite.example.com />

我的脚本声明了一个具有一堆可用作 Javascript 的属性的对象Object(),即

<script type="text/javascript">
//From http://mysite.example.com/awesome.js
alert(Awesome.Name);
</script>

由于加载时间差异,我似乎需要表明我的脚本中的“真棒”对象已准备好。我需要它独立存在,因此不依赖于特定的 JS 框架。

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

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

4

5 回答 5

5

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

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

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();
        }
    });
}
于 2009-02-24T17:37:34.473 回答
1

如果您的脚本需要在实例化对象之前加载 DOM,您应该查看一些框架并了解它们如何处理此问题,然后在您的代码中实现它。如果您不需要加载 DOM,那么我会让用户根据加载时间担心使用对象的时间。通常,一旦您的脚本被加载,您的对象应该可以使用,这意味着该对象应该在script包含它的标签之后立即可用。

于 2009-02-24T17:27:43.517 回答
1

在全局范围内可访问的任何内容都可以通过该window范围进行访问。因此,你可以使用这个:

if (window["Awesome"] != null) { /* do something */ }
于 2009-06-02T07:17:44.430 回答
0

一种)。你意识到脚本请求被阻塞了吗?您对此是否满意,或者您想解决这个问题,因为您的问题的答案取决于它。

乙)。赤裸裸的防弹机制和简单的机制是调用可以保证页面上存在的指定方法。让该方法的实现由用户来做。存在许多其他方法,但我们需要知道代码的生命周期和意图到底是什么来推荐任何东西。

于 2009-02-24T17:32:04.910 回答
0

你可以像这样简单地使用它:

<script type="text/javascript" src="myfunction.js"></script>
<script type="text/javascript" src="iwannaloadthis.js?onload=executeThis"></script>

请记住,如前所述,执行 this 必须在 myfunction.js 中定义(或在尝试加载 iwannaloadthis.js 之前)。

希望这可以帮助!!

于 2012-06-01T15:29:48.647 回答