1

我使用 $.post() 函数将图像动态填充到容器 div 中。每当我对图像进行不同的过滤时,我都会中止当前请求,但是,在导航到我网站上的另一个页面时会遇到麻烦。我意识到,我也应该在那里中止当前的请求,但是,它在 Safari 下挣扎,而不是在 Chrome 下。

初始化请求:

var request = $.post( ... );

运行另一个时:

request.abort();
request = $.post( ... );

导航离开时,转到另一个页面:

$(window).unload(function() { request.abort(); });

是否有任何原因导致它无法正常工作,或者至少并非总是在 Safari 下运行?谢谢!

4

3 回答 3

2

请看一下这个问题:
Why is jQuery unload not working in chrome and safari?

unload函数不是任何标准的一部分,因此您实际上无法确定卸载函数是否在浏览器中被调用。

尝试:

$(window).on('beforeunload ',function() {
    request.abort();
});

反而。

更新

另一种解决方案如下。您的用户可能会通过链接导航到另一个页面。因此,使用 jquery 更新onclick链接的行为:首先中止请求,然后导航到新页面。

于 2013-05-09T21:08:01.400 回答
2

不幸的是 Safari 不支持卸载事件。相反,您应该使用pagehide.

这里有一个例子:

<html>
    <head>
    <script>

    function pageShown(evt)
    {
        if (evt.persisted)
            alert("pageshow event handler called.  The page was just restored from the Page Cache.");
        else
            alert("pageshow event handler called for the initial load.  This is the same as the load event.");
    }

    function pageHidden(evt)
    {
        if (evt.persisted)
            alert("pagehide event handler called.  The page was suspended and placed into the Page Cache.");
        else
            alert("pagehide event handler called for page destruction.  This is the same as the unload event.");
    }

    window.addEventListener("pageshow", pageShown, false);
    window.addEventListener("pagehide", pageHidden, false);

    </script>
    <body>
    <a href="http://www.webkit.org/">Click for WebKit</a>
    </body>
    </html>

我建议您阅读以下内容:https ://www.webkit.org/blog/516/webkit-page-cache-ii-the-unload-event/

如果可以选择其他解决方案,请不要使用卸载!

于 2013-05-09T21:09:07.137 回答
0

尝试这个:

window.onbeforeunload = function(e) {
    return 'Safari.';
};
于 2013-05-09T21:10:11.750 回答