IE不执行我的代码'onunload'

时间:2013-06-09 18:48:40

标签: javascript jquery internet-explorer

我需要在离开浏览器之前执行一些代码,我实现了这个:

    window.onbeforeunload = function () { return 'Are you sure?'; };
    window.onunload = function () { releaseLocking(); };

与谷歌浏览器配合使用效果非常好。关闭GC时:显示一条消息,

  • 如果我点击“停留在页面上”按钮,则不会发生任何事情。完美。
  • 如果我点击“离开页面”按钮,将执行releaseLocking下的代码。完美。

我在使用Internet Explorer时遇到问题。

  • 如果我点击“停留在页面上”按钮,则不会发生任何事情。完美。
  • 如果我点击“离开页面”按钮,releaseLocking下的代码将无法执行。

有什么想法吗?

我搜索了很多,但没有找到解决方案。

感谢。


更新

var releaseLocking = function() {
    // Release only if lock is set on the current user
    if (transport().lockedById() == 5) { // 5 is dummy (Jean Dupont for testing)
        transport().lockedById(null);
        transport().lockedTime(null);
        return ctxTransport.saveChanges(SILENTSAVE);
    }
};

2 个答案:

答案 0 :(得分:0)

似乎IE有一个错误,即卸载事件不会在网站上的特定页面上触发。

unload事件从未被触发,因为页面的所有内容在导航到另一个页面之前尚未完成加载。

在卸载前尝试停止

试试这个:

function fixUnload() {
    // Is there things still loading, then fake the unload event
    if (document.readyState == 'interactive') {
        function stop() {
            // Prevent memory leak
            document.detachEvent('onstop', stop);

            // Call unload handler
            unload();
        };

        // Fire unload when the currently loading page is stopped
        document.attachEvent('onstop', stop);

        // Remove onstop listener after a while to prevent the unload function
        // to execute if the user presses cancel in an onbeforeunload
        // confirm dialog and then presses the stop button in the browser
        window.setTimeout(function() {
            document.detachEvent('onstop', stop);
        }, 0);
    }
};

function unload() {
    alert('Unload event occured.');
};

window.attachEvent('onunload', unload);
window.attachEvent('onbeforeunload', fixUnload);

答案 1 :(得分:0)

这些类型的事件是非常不可靠的...如果用户的浏览器崩溃了(大声笑即!)我能够通过使用心跳并每20-30秒轮询一次服务器来实现相同的结果(或者更长的idk你的持续时间可能是)并使用它来处理退出事件..我也在这个应用程序中有一个锁定机制。

祝你好运。