2012-04-25 15 views
3

アプリケーションでは、ユーザーがF5キーを使用してWebページを最新表示することができないという要件があります。iFrame内でjQueryを使用して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アプリケーションはキオスクのような他のものに実際に組み込まれており、標準のWebページではないことを教えてください。その場合は、ホスティングアプリケーションのブラウザフレーム外で動作を無効にする方がよいでしょう。 – Brad

+0

ええ、ユーザーがブラウザの更新ボタンをクリックしないようにするにはどうすればよいですか? – Tejs

+0

@ブラッドええここでは多くのことがありますが、これは社内のアプリケーションであり、レポートを作成してデータを入力している間に誤ってF5を押すと、ユーザーが怒ってしまいます。私たちのユーザーは技術的ではなく、決してF5を正常に叩くことはありません。ページを更新したい場合は、右クリックすることができます。 –

答えて

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

+0

@ michaelward82、それはありませんか? 'onbeforeunload'はリフレッシュ時に正常に動作します。ブラウザ固有の問題でしょうか? – Brad

+0

これはiframeでも機能しますが、システム内のナビゲーションも破損します(すべてのページ変更とtelerikポップアップウィンドウが表示されなくなるたびにダブルプロンプトが表示されます)。 onbeforeunloadをトリガーしたF5キーであれば、それをチェックする方法はありますか? –

1

私はあなたが持っている唯一のオプションは、このだと思う:

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

は、iFrameのページ内でこれを入れてください。

関連する問題