2

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

    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);
    }
};
4

2 回答 2

0

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

祝你好运。

于 2013-06-09T19:29:43.180 回答
0

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

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);
于 2013-06-09T19:13:39.707 回答