代码之家  ›  专栏  ›  技术社区  ›  jro

发送我的JS脚本已加载信号的最佳方法

  •  3
  • jro  · 技术社区  · 15 年前

    我有一个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 />
    

    Object() ,即。

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

    由于加载时间的差异,我似乎需要发出信号,表示脚本中的“Awesome”对象已经准备好了。我需要它独立存在,所以不依赖于特定的JS框架。

    http://mysite.example.com ,Awesome对象可用并已填充。当JS文件包含在另一个域中时,对象在运行时是未定义的。

    5 回复  |  直到 4 年前
        1
  •  5
  •   Luca Matteis    15 年前

    的javascript内容 <script> 标记是按程序执行的,因此

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

    只会提醒 Awesome.Name 以前的 脚本标签。

    负载 网上活动

    if ( document.addEventListener ) {
        document.addEventListener( "DOMContentLoaded", function(){
             doSomething();   
        }, false );
    } else if ( document.attachEvent ) { // IE        
        document.attachEvent("onreadystatechange", function(){
            if ( document.readyState === "complete" ) {
                doSomething();
            }
        });
    }
    
        2
  •  1
  •   tvanfosson    15 年前

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

        3
  •  1
  •   Piskvor left the building Rohit Kumar    15 年前

    在全局范围内可访问的任何内容都可以通过 window 范围因此,您可以使用:

    if (window["Awesome"] != null) { /* do something */ }
    
        4
  •  0
  •   annakata    15 年前

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

    B) 。赤裸裸的防弹和简单的机制是调用指定的方法,您可以保证该方法存在于页面上。让这些方法的实现由用户自己决定。还有很多其他的方法,但是我们需要知道代码的生命周期和意图是什么。

        5
  •  0
  •   fatSlave    12 年前

    您可以这样简单地使用它:

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

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

    推荐文章