Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 发送我的JS脚本已加载信号的最佳方法_Javascript_Dom Events_Unobtrusive Javascript - Fatal编程技术网

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

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 /> 由于加载时间的

我有一个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 />
由于加载时间的差异,我似乎需要发出信号,表示脚本中的“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>