使用jQuery在iFrame中防止F5

时间:2012-04-25 16:59:23

标签: jquery internet-explorer iframe

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

我已经实现了解决方案here但是我刚刚发现这在页面上的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有什么特别之处吗?

3 个答案:

答案 0 :(得分:5)

我知道您希望阻止用户在页面上工作时丢失数据,我建议采用不同的解决方案。为什么不在他们离开页面时挂钩,并提示他们是否打算这样做?

Best way to detect when a user leaves a web page?

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

答案 1 :(得分: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();
});

答案 2 :(得分:1)

我认为你唯一的选择就是:

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

将其放入iFrame页面。