2012-04-25 32 views
3

我們的應用程序要求用戶不允許使用F5刷新網頁。使用jQuery防止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

這是我聽說過的最荒謬的要求。請告訴我,您的Web應用程序實際上已嵌入其他內容中,例如信息亭,並且這不是標準網頁?如果是這樣,最好在託管應用程序中禁用瀏覽器框架之外的行爲。 – Brad 2012-04-25 17:01:20

+0

是的,什麼是阻止用戶點擊瀏覽器的刷新按鈕? – Tejs 2012-04-25 17:03:23

+0

@Brad是的我在這裏得到了很多,這是一個內部應用程序,如果他們在寫報告和輸入數據時意外擊中F5,我們的用戶就會生氣。我們的用戶不是技術人員,通常不會打F5。如果他們想刷新頁面,可以右鍵單擊。 – 2012-04-25 17:04:18

回答

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(); 
}); 
5

由於知道您希望防止用戶在頁面上工作時丟失數據,我會提出一個不同的解決方案。爲什麼不在他們離開頁面時進入鉤子,並提示他們是否打算這麼做?

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

Gmail使用的消息已經沒救了的時候/被送往但這種方法。這將幫助您涵蓋許多場景,讓用戶滿意,並且仍然允許F5在有人需要的情況下工作。

+0

我已經爲此+1了,但它仍然沒有涵蓋iframe中刷新的情況。 – michaelward82 2012-04-25 18:03:40

+0

@ michaelward82,它不? 'onbeforeunload'在刷新時工作正常。也許這是一個瀏覽器特定的問題? – Brad 2012-04-25 18:08:11

+0

這適用於iframe,但它也會破壞系統中的導航(每次頁面更改和telerik彈出窗口不再加載的雙重提示)。有沒有辦法檢查onbeforeunload內部,如果它是觸發它的F5鍵? – 2012-04-25 19:18:16

1

我認爲你唯一的選擇是這樣的:

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

將這個內嵌框架頁面內。