Javascript:取消/停止图像请求

Posted

技术标签:

【中文标题】Javascript:取消/停止图像请求【英文标题】:Javascript: Cancel/Stop Image Requests 【发布时间】:2010-10-30 03:16:57 【问题描述】:

我有一个大量使用 Ajax 的网站。有时我需要在页面上为用户加载大图像文件。我的问题是,当下载这些大图像文件时,如果用户离开显示图像的页面,有没有办法阻止它们?谢谢。

【问题讨论】:

您是否注意到当您离开页面时浏览器没有取消下载?我同意它应该。然而,我也可以很容易地想象不同的浏览器可能有不同的行为。不幸的是。 嗯,这是一个 ajax 应用程序,所以我从不离开页面,但是,我尝试“离开”页面,令我惊讶的是,图像并没有停止下载。哇。没想到。我正在使用 FF 3.0.10 / IE8 和 Fiddler 来查看流量。 【参考方案1】:

我遇到了完全相同的问题,当用户通过 (ajax) 搜索结果快速“分页”时,浏览器仍在尝试下载每个页面的个人资料图片,而不仅仅是当前页面。这段代码对我有用,在运行新搜索之前调用了分页事件:

//cancel image downloads
if(window.stop !== undefined)

     window.stop();

else if(document.execCommand !== undefined)

     document.execCommand("Stop", false);

基本上就像点击浏览器上的“停止”按钮。

IE、FireFox、Chrome、Opera 和 Safari 中测试

【讨论】:

非常感谢 MyWhirledView。这几天我一直在努力解决这个问题。 确实在 Safari 中工作...查看类似问题并在此处修复:***.com/questions/3146200/… 有没有办法将此限制为一种文件类型? @greatwitenorth 很遗憾,您无法精确控制它的应用方式。【参考方案2】:

像这样。

$(img).attr('src','');

【讨论】:

【参考方案3】:

假设您使用 ajax 加载图像,您可以简单地在 window.onunload 事件中中止请求。为您正在使用的 XMLHttpRequest 对象声明一个全局变量。

var xhr;
//if using the XMLHttpRequest object directly
//you may already be doing something like this
function getImage(...)
  xhr = new XMLHttpRequest();
  xhr.open(....);

如果使用 jQuery,您可以将调用 $.ajax() 或 $.get 的返回值分配给 xhr 变量。

xhr = $.ajax(.....);

处理 window.onunload 并中止请求。

window.onunload = function()
  xhr.abort();

【讨论】:

我没有使用 ajax 来加载图像。我认为设置 src = '' 可以解决问题,但事实并非如此。我真正要找的是 document.getElementById('image').stopLoading(); :)【参考方案4】:

将 SRC 标记重新分配给不同的图像在 IE7 中不起作用,它会继续尝试下载第一个图像。

设置如下:

我创建了一个 JPEG 类型的 HTTP 处理程序。它包含永远不会完成执行的代码。所以 someImage.src=myhandler.ashx 将永远坐在那里加载,直到超时。

在此过程中,按下另一个按钮,将图像重新分配给一个小图像文件: someImage.src=small.jpg

即使我们重新分配了 src,对 myhandler.ashx 的请求也没有结束。

此外,如果您实际删除节点 someImage.parentNode.removeChild(someImage) 仍会继续尝试下载 myhandler.ashx

使用 IE7 测试并使用 HTTP Watch Pro 进行监控。

【讨论】:

我有一部分页面希望停止所有图像加载。我发现如果我转到父节点并将 innerhtml 设置为“”,它会很好地中止所有请求。这仅适用于 IE,Safari 和 Firefox 似乎无论如何都会继续加载图像(由于其他原因,以编程方式单击停止按钮不适合我)【参考方案5】:

糟糕的解决方案是简单地将图像标签的 SRC 属性设置为空字符串,或者将其指向一个小部件。

编辑

看到您的评论,很惊讶它无法将 SRC 属性更改为空...尝试使用空白.gif 或其他东西。

如果这不起作用,您可能会受到浏览器架构的限制,这意味着您是 S.O.L.

【讨论】:

以上是关于Javascript:取消/停止图像请求的主要内容,如果未能解决你的问题,请参考以下文章

java并发基础--- 取消与关闭

对 CloudFront 的字体请求为“(已取消)”

《java并发编程实战》读书笔记6--取消与关闭

如果请求中止,则停止处理 Flask 路由

Java并发编程学习12-任务取消(上)

在我的 UI 中选择图像如何停止我的 Web API?