3

我们的应用程序要求不允许用户使用 F5 刷新网页。

我在这里实现了解决方案,但是我刚刚发现这在页面上的 iframe 内不起作用。

iframe 是从 Telerik Radeditor 控件生成的。

我尝试在包含 radeditor 的页面中执行以下操作。

$(function () {
    $('#<%=RadEditor1.ClientID %>_contentIframe html').bind('keydown', function () {
        if (window.event && window.event.keyCode == 116) {
            window.event.cancelBubble = true;
            window.event.returnValue = false;
            window.event.keyCode = 0;
            window.status = "F5 is disabled on all popups";
            return false;
        }
    });
});

但是它不起作用。

我缺少的 iframe 有什么特别之处吗?

4

3 回答 3

5

知道您想防止用户在页面上工作时丢失数据,我会提出一个不同的解决方案。为什么不在他们离开页面时直接挂钩,并提示他们是否打算这样做?

检测用户何时离开网页的最佳方法?

当邮件尚未保存/发送时,Gmail 会使用此方法。这将帮助您涵盖许多场景,让您的用户满意,并且如果有人愿意,仍然允许 F5 工作。

于 2012-04-25T17:06:37.897 回答
2

这种方法始终如一地工作。

$(function () {
    function addF5Handler(){
        el = $('body', $('#myframe').contents());
        if(el.length != 1) {
            setTimeout(addF5Handler, 100);
            return;
        }
        $($('#myframe').get(0).contentWindow.document).keydown(function () {
            var myWindow = $('#myframe').get(0).contentWindow;
            if (myWindow.event && myWindow.event.keyCode == 116) {
                myWindow.event.cancelBubble = true;
                myWindow.event.returnValue = false;
                myWindow.event.keyCode = 0;
                myWindow.status = "F5 is disabled on all popups";
                return false;
            }
        });
    }
    addF5Handler();
});
于 2012-04-25T21:29:04.470 回答
1

我认为您唯一的选择是:

$(window).on('beforeunload', function () {
  return 'Leave?';
});

把它放在 iFrame 页面中。

于 2012-04-25T17:31:56.303 回答