Javascript 发送我的JS脚本已加载信号的最佳方法
我有一个JS脚本,它将托管在我的服务器上,其他人将嵌入到他们的html中,即Javascript 发送我的JS脚本已加载信号的最佳方法,javascript,dom-events,unobtrusive-javascript,Javascript,Dom Events,Unobtrusive Javascript,我有一个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 /> 由于加载时间的
...<code for http://yoursite.example.com />
<script type="text/javascript" src="http://mysite.example.com/awesome.js" />
...<code for http://yoursite.example.com />
由于加载时间的差异,我似乎需要发出信号,表示脚本中的“Awesome”对象已经准备好了。我需要它独立存在,所以不依赖于特定的JS框架
我是否需要发布自己的自定义JS事件,或者我的脚本已加载这一简单事实是否会被现有页面级事件捕获?否则我该怎么做
更新:作为参考,如果我在运行于
http://mysite.example.com
,Awesome对象可用并已填充。当JS文件包含在另一个域中时,对象在运行时是未定义的。如果脚本需要在对象实例化之前加载DOM,您应该查看一些框架,看看它们如何处理,然后在代码中实现它。如果不需要加载DOM,那么我会让用户根据加载对象的时间来担心使用对象的时间。通常,在加载脚本后,对象应该可以立即使用,这意味着该对象应该在包含它的脚本标记之后立即可用。A)。你意识到脚本请求被阻塞了吗?你对此满意吗?还是想解决这个问题,因为你问题的答案取决于它
B) 。赤裸裸的防弹和简单的机制是调用指定的方法,您可以保证该方法存在于页面上。让这些方法的实现由用户自己决定。还有很多其他的方法,但我们需要知道代码的生命周期和意图是什么,以推荐任何东西。标签的javascript内容是按程序执行的,因此
<script type="text/javascript" src="http://mysite.com/awesome.js" />
<script type="text/javascript">
alert(Awesome.Name);
</script>
可以通过窗口
范围访问全局范围内的任何内容。因此,您可以使用:
if (window["Awesome"] != null) { /* do something */ }
您可以这样简单地使用它:
<script type="text/javascript" src="myfunction.js"></script>
<script type="text/javascript" src="iwannaloadthis.js?onload=executeThis"></script>
请记住,如前所述,必须在myfunction.js中定义执行此操作(或在尝试加载iwannaloadthis.js之前)
希望这能有所帮助!!抱歉,word choice。发布?发射?声明?开火?不确定在这种情况下使用什么适当的语言--javascript不是我正常的开发领域。谢谢。“加载脚本后,您的对象应该可以使用”是我的理解,但我没有看到这种行为。完全填充/声明对象时出现延迟。谢谢。不,我不知道脚本请求被阻止。我不确定我是否遵循您的建议,因此任何帮助都很好。您是否建议我的库(由具有属性的对象组成)调用页面上的方法?它只是一个数据容器,供其他对象访问。啊,很好,DOMContentLoaded。那么,IE、Safari、Opera的简单答案是什么?;-)@jro:如果您可以不用等待图像加载,请使用窗口。onload
;您还可以将脚本作为最后一个元素添加到正文
;如果您不希望前者延迟/不喜欢后者,请使用框架或实施变通方法(doScroll、defer、onreadystatechange等)yourself@Luca:仅添加“onreadystatechange”侦听器是不够的:您必须检查readyState
的值,否则,即使文档仍然不完整,也可能会执行您的函数@卢卡:是的,跨平台事件处理很麻烦:(顺便说一句,在IE中,document.readyState=complete
也在加载外部资源后触发,IE对窗口没有任何好处。onload
除了事件直接在onload
侦听器之前触发外…@Luca:您将readyState
放在侦听器中-检查级别是否过高:它必须在侦听器中erThanks,但您错过了一个关键要求:“我需要它独立运行,因此不依赖于特定的JS框架。”
if (window["Awesome"] != null) { /* do something */ }
<script type="text/javascript" src="myfunction.js"></script>
<script type="text/javascript" src="iwannaloadthis.js?onload=executeThis"></script>