当前位置: 首页 > 面试题库 >

JavaScript可以检测用户何时停止加载文档吗?

谷出野
2023-03-14
问题内容

我正在基于此页面使用脚本标签长轮询技术实现Comet 。

一个问题(我认为没有解决方案)是“厄运的th子”-浏览器继续将文档永远显示为“正在加载”,并使工具栏上的“停止”按钮保持启用状态。这种品牌的意义,因为该文件
仍然加载,虽然它的效果并不理想,我想我可以住在一起。

但是,第二个问题是,如果用户实际单击“停止”,则浏览器将停止加载我的脚本标签,并且我必须依靠超时来重新启动Comet。这意味着,如果我的超时时间是20秒,则在用户单击“停止”后的20秒钟内,页面可能不会更新。我的问题是:有什么方法可以检测他们何时进行此操作?我可以使用
onkeydown 事件检测他们何时按下转义键,但是如果他们使用工具栏按钮或菜单项停止加载,则无法检测。

该解决方案需要在Firefox 3.5和Chrome 3.0中运行。


问题答案:

正如我在评论中建议的那样…在onload事件中添加脚本。

编辑:我想我可以解释我的建议的理由,希望它可以帮助其他人尝试解决相同的问题。

浏览器将继续“加载”(并因此发挥作用),直到为给定窗口或选项卡中的onload每个“窗口”(每个具有全局window父级的DOM树)触发事件为止。许多外部资源都可以并行下载,但是默认情况下-
实际上,除了IE 1(使用标签defer上的属性<script>),任何浏览器都无法转义该默认设置-
<script>资源将“阻止”文档的进一步处理。如果<script>资源请求从未完成,则页面的onload事件将永远不会触发(并且还有其他副作用,如果<script>DOM中的内容之后:DOM可能永远不会完全加载,此后的资源<script>可能永远也不会加载)
,因此永远无法完成“

继续进行下去,您还可以通过<script>在加载DOM时添加一个带有deferIE属性的首字母缩写,并在期望onload事件触发时切断其他浏览器的连接来提高性能(这很难查明)准确,可能需要进行实验)。

1
要使此答案保持最新状态…该defer属性现在在大多数现代浏览器中都可用。



 类似资料:
  • 问题内容: 好的。 我可以从我的理解中得知某人正在滚动。因此,我试图找出有人停下来时该如何捕捉。从上面的示例中,您可以看到发生滚动时,我正在从一组元素中删除一个类。但是,我想在用户停止滚动时重新打开该类。 这样做的原因是,我打算在页面滚动时进行中转节目,以使页面具有我正在尝试的特殊效果。但是我尝试在滚动时删除的一个类与该效果冲突,因为它对某种性质是透明的。 问题答案: 更新资料 我写了一个扩展来增

  • 问题内容: 我想在文档加载后调用一个函数,但是文档可能尚未加载完成,也可能尚未加载完成。如果确实加载,那么我可以调用该函数。如果未加载,则可以附加事件监听器。在onload已经触发之后,我无法添加事件监听器,因为它不会被调用。那么如何检查文档是否已加载?我尝试了下面的代码,但不能完全正常工作。有任何想法吗? 问题答案: 不需要galambalazs提到的所有代码。在纯JavaScript中实现跨浏

  • 问题内容: 我想在用户单击允许他们下载文件的超链接后将用户重定向到其他网页。但是,由于它们需要在打开/保存文件对话框中进行选择,因此在它们接受下载之前,我不希望它们重定向。 我如何检测到他们执行了此操作? 问题答案: 正如我多年维护download.js所发现的那样,根本 无法 通过JS 来告诉用户 (或可能通常参见下文),用户选择如何使用下载“打开/保存”对话框。这是一个常见的功能请求,多年来我

  • 问题内容: 加载JavaScript文件时是否会触发事件?由于YSlow建议将JavaScript文件移动到页面底部,因此出现了问题。这意味着 在加载包含其代码的js文件之前会触发该事件。 如何避免这种情况? 问题答案: 我没有方便的参考,但是脚本标记是按顺序处理的,因此,如果将脚本标记放在定义function1等的脚本标记之后,则应该可以。 当然,另一种方法是通过在构建过程中合并文件来确保总共只

  • 问题内容: 我用Sax解析了一个大的xml文档,当某些条件建立时,我想停止解析该文档吗?怎么做? 问题答案: 创建SAXException的特殊化并将其抛出(您不必创建自己的特殊化,但这意味着您可以自己专门捕获它,并将其他SAXExceptions视为实际错误)。

  • 问题内容: 是否有可能以某种方式停止或终止JavaScript,从而防止再次发生基于JavaScript的执行,而无需重新加载浏览器? 我在想JavaScript等同于PHP。 问题答案: 简短答案: 如果您想了解更多,请继续阅读。 您是否要停止JavaScript的开发/调试工作? 代码中的表达式将停止页面执行,然后您的浏览器开发人员工具将使您可以查看页面冻结时的状态。 您是否要故意停止设计您的