5

我正在使用jQuery BBQ: Back Button & Query Library插件来创建一个页面,该页面在单击链接时会引入动态内容。单击链接时,哈希值会更改并拉入新内容(因此禁用了单击 href 的“默认”操作。)

那部分工作得很好,但是有一个问题。

我的问题示例


假设“主页”页面中有一个 DIV,其中包含许多图像和一个链接列表......

  • 第一页
  • 第二页
  • 第三页

图像可能需要一段时间才能加载,同时用户通常不会等待它们完全加载并单击“第一页”链接。

这会清除“主页”页面的内容并加载“第一页”内容。这很好用。

问题是即使用户已经从“主页”页面移动,来自“主页”页面的图像仍在浏览器中加载。

我知道发生这种情况是因为页面实际上并没有改变,而且我正在使用 BBQ 插件的 hashchange hack,但我想知道 JavaScript 中是否有办法告诉当前加载的所有图像在hashchange事件上停止?

?? 示例代码就像...


$(window).bind('hashchange', function () {

    //code to stop images from loading

    // now load in new HTML content

});
4

2 回答 2

8

我在 WebKit (Chrome/Safari)、Firefox 和 IE 中测试了这个解决方案,它似乎可以工作。

我使用了一个使用window.stop();的函数。对于大多数浏览器,如果浏览器不支持 window.stop()

在此处查看更多信息:https ://developer.mozilla.org/en/DOM/window.stop

因此,对于支持它的浏览器(Firefox、WebKit),请使用:

window.stop();

对于 IE 使用:

document.execCommand("Stop", false);

不过要小心...

这基本上就像在浏览器中按下“停止”按钮,所以当前正在下载的所有内容都会停止,而不仅仅是图像(就像我想要的那样。)

那么,内...

$(window).bind('hashchange', function () {

});

这是我使用的功能...

function stopDownloads() {
    if (window.stop !== undefined) {
        window.stop();
    }
    else if (document.execCommand !== undefined) {
        document.execCommand("Stop", false);
    }   
}
于 2010-07-08T20:33:07.443 回答
1

相当有信心这是不可能的(但很高兴被证明是错误的)。

原因是嵌入您网站的图像会导致HTTP GET将请求发送到您的服务器。发送该请求后,您的服务器将处理并响应该请求,该请求将由浏览器处理。

现在,如果可能话,我想这将涉及遍历每个图像并取消其src属性(我认为这不会起作用,因为正如我所说,请求已经发送)。或者调用一些(可能依赖于浏览器)机制来停止图像加载。

于 2010-06-30T03:23:23.010 回答