2011-10-24 175 views
4

我知道這不是建議的,但我需要它,因爲我有一個頁面內的iframe具有實際內容,我希望當用戶點擊刷新按鈕,iframe重新加載不完整頁。防止用JavaScript刷新/重新加載頁面

我知道我必須致電onunload/onbeforeunload事件,但我不想問我是否想離開窗戶,就是不要。

這可能嗎?我已經處理了F5鍵,但我也想防止從按鈕刷新。

+5

這聽起來像(可悲的)'onbeforeunload'事件的情況。您可以使用它來提示用戶並詢問他們是否想離開該頁面(刷新視爲「離開」該頁面)。 – 2011-10-24 19:39:48

+8

您不能也不應該覆蓋用戶從瀏覽器期望的行爲。如果您的應用程序需要「刷新」功能,其功能與「刷新」按鈕的常規功能不同,請在應用程序的用戶界面中構建一個刷新按鈕。這是非常常見的(例如,請參閱Gmail),用戶會比您試圖覆蓋其預期的瀏覽器行爲更好地理解它。 –

+0

@MattMcDonald是的,我知道,但我不想問用戶,只需刷新iframe並取消刷新頁面事件。 – xuso

回答

3

更新:我在5年前寫了這篇文章,現在瀏覽器做了不同的東西,你仍然可以用它來測試你的瀏覽器集,但是你的經驗可能與我以前的研究有所不同。

使用jQuery進行實驗,因爲我很懶。

從理論上講,防止默認行爲應該阻止事件做它應該做的任何事情。它不適用於我的示例中的事件,並且在不同的瀏覽器中有不同的結果。我把Math.random()放入來確定頁面是否被重新加載。由於不同的瀏覽器做了不同的事情,我強烈建議不要在生產環境中使用它。

<body> 
<p></p> 
<script type="text/javascript"> 
    $('p').append(Math.random()); 

    $(window).bind({ 
     beforeunload: function(ev) { 
      ev.preventDefault(); 
     }, 
     unload: function(ev) { 
      ev.preventDefault(); 
     } 
    }); 
</script> 
</body> 

使用CTRL-R或F5或刷新鍵:

  • Safari瀏覽器:空
  • 鉻:空
  • 歌劇院10 & 11:空
  • 的Firefox 7。X:顯示有兩個按鈕,一個特殊提示:
    • 留在頁面 - 不會重新加載頁面
    • 離開此頁面 - 重新加載頁面
  • IE7 & IE8:顯示有兩個按鈕提示:
    • OK - 重新加載頁面
    • 取消 - 不重新加載頁面
  • IE9:顯示有兩個按鈕提示:
    • 離開這個頁面 - 重載
    • 留在這個頁面上 - 不重裝

Firefox的提示(你可以告訴我測試它在Mac上)

Firefox Prompt

IE7 & IE8提示

IE7 & IE8 Prompt

IE9提示

IE9 Prompt

最後:

是的,我沒有測試IE6,我刪除了我的VM這安裝了它,我沒有安裝IE10 beta的虛擬機,所以你也沒有運氣。

您也可以嘗試使用cancelBubble和stopPropagation,或者返回false;可能會揭示出有用的東我對喬丹的回覆感到失望,你不應該試圖重寫默認設置,所以我在這裏總結我的實驗。

+0

閱讀關於MDN的文章preventDefault() https://developer.mozilla.org/zh/DOM/event.preventDefault – paulj

1

在onsubmit事件返回假防止形式被提交併停留在同一頁面無需任何用戶交互..

例如..

當具有輸入字段的表單是空的,並提交這個javascript檢查驗證,並相應地返回.. 如果返回false,則不做任何事情(即,頁面未刷新或重定向)。

如果驗證無誤並且返回true,則執行表單操作。

function validateForm(Str) { 
mystring=document.getElementById('inputid').value; 
    if(!mystring.match(/\S/)){ 
    alert ('Please Enter a String.Field cannot be empty'); 
    return false; 
    }else{ 
    return true; 
    } 
}