Safari中的jQuery .unload()问题

时间:2013-05-09 21:01:55

标签: jquery

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

初始化请求:

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

当运行另一个时:

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

导航时,转到另一页:

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

是否有任何理由说明在Safari下无法正常工作或至少 ? 谢谢!

3 个答案:

答案 0 :(得分:2)

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

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

尝试:

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

代替。

<强>更新

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

答案 1 :(得分: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/

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

答案 2 :(得分:0)

试试这个:

window.onbeforeunload = function(e) {
    return 'Safari.';
};