javascript,暂停/恢复window.load事件

时间:2012-10-30 23:00:33

标签: javascript events javascript-events onload

我有一个超出我的客户端技能的异常问题。我有一个html页面,在主体中有两个连续的script标签。两个script标记都会触发ajax请求以检索内容,然后将其放入DOM中。我控制了第一个script标记,而我对第二个script标记没有任何控制或知识。我只知道它会调用ajax并将内容放入DOM中。我也知道我的标签是第一个。

我希望我的脚本标记立即触发并暂停/停止第二个标记。然后,根据我的ajax返回的内容,我可以选择执行第二个脚本标记。我该怎么做?

我写了fiddle来证明我的问题。我为ajax调用替换了settimeout,为我的决定替换了Math.random。请注意,第一个(我的)的settimeout持续时间非常长,3秒,第二个的持续时间(我不控制的持续时间非常短,0.5秒。现在发生的是他们是两个人都立刻跑了。第二个人发出的消息是在0.5秒内发出来的,第一个人的消息在50%的时间里以3秒的速度进入。

我希望第一个脚本运行,等待3秒,做出决定并立即打印第一条消息,或者调用第二个脚本,该脚本将等待额外的0.5秒以打印第二条消息。我不应该同时看到这两条消息,而且我不应该在3.5秒之前看到第二条消息。

同样,我不知道对脚本二的内容有任何了解。在这种情况下,您可以轻松隐藏id = ext_div,但我不知道该ID是什么。那不是我想要的答案。我正在考虑抓住第一个脚本上的事件并对stopPropagationTODO1评论中的类似内容做些什么。但这不起作用。事件如果确实如此,我需要一个我认为不存在的resumePropgation函数。

2 个答案:

答案 0 :(得分:0)

  

我希望我的脚本标记立即触发并暂停/停止第二个标记。然后,根据我的ajax返回的内容,我可以选择执行第二个脚本标记。我该怎么做?

实现这一目标的唯一方法是让你的ajax调用同步,例如,将false作为第三个参数传递给XMLHttpRequest#open(或者你正在使用的库中的等价物,如果你正在使用一个)。有几个原因为什么这是一个坏主意,但如果你绝对需要你的ajax调用在下一个script标记执行之前完成,那就是唯一的方法。当然,这意味着HTML文档中script标记下面定义的任何DOM元素都不会存在。

答案 1 :(得分:0)

感觉您需要某种依赖管理系统用于前端脚本。

试试RequireJS。您可以加载脚本,运行ajax请求,并根据您的逻辑决定是否加载第二个外部脚本。

这假设您可以控制页面上的标记。