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

问题描述 投票:1回答:2

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

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

我写了fiddle来说明我的问题。我用settimeout代替了ajax调用,用Math.random代替了我的决定。请注意,第一个(我的)的settimeout持续时间很长,为3秒,而第二个(我不控制的)的ext_div持续时间很短,.5秒。现在发生的是它们都立即运行。第二条消息在.5秒后进入,而第一条消息在3秒时进入50%的时间。

我希望第一个脚本运行,等待3秒钟,做出决定并立即打印第一条消息,或者调用第二个脚本,这将等待另外的0.5秒钟来打印第二条消息。我永远都不会同时看到两个消息,也永远不会在3.5秒之前看到第二条消息。

同样,我对脚本二的内容一无所知。在这种情况下,您可以轻松隐藏id = stopPropagation,但我不知道该id是什么。那不是我想要的答案。我当时正在考虑在第一个脚本中捕获事件,然后对该事件执行TODO1或在resumePropgation注释处执行类似操作。但这是行不通的。如果发生的话,我需要一个false函数,我认为该函数不存在。

javascript events dom-events onload
2个回答
0
投票

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

使这种情况发生的唯一方法是使ajax调用同步,例如,将XMLHttpRequest#open作为第三个参数传递给XMLHttpRequest#open(或使用的库中的任何等效项,如果您使用的是一)。有多个原因为什么这是坏主意,但是如果您绝对肯定要在下一个script标记执行之前完成ajax调用,那么这是唯一的方法。当然,这意味着HTML文档中script标记下定义的所有DOM元素都不存在。


0
投票

感觉就像您想要某种类型的前端脚本依赖管理系统。

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

这是假定您当然可以在页面上控制标记。

© www.soinside.com 2019 - 2024. All rights reserved.