2010-03-23 38 views
8

我們使用window.location.href將用戶導航到頁面。 另外,我們已經配置了window.onbeforeunload事件來提醒用戶,以防有未保存的更改。IE中的window.onbeforeunload和window.location.href

window.onbeforeunload = confirmBeforeClose; 

function confirmBeforeClose() { 
    if (jwd.global.inEditMode) 
     return "Your changes will not be saved :) and you will be punished to death"; 
} 

在有未保存的更改,我嘗試使用window.location.href導航用戶的地方,我得到的警告信息。

它工作正常,如果我點擊確定彈出。但是,如果我單擊CANCEL,JS會在window.location.href中引發未指定的錯誤。

任何幫助表示讚賞。

+0

請出示你在哪裏做'location.href'的代碼。 – 2010-03-23 12:43:25

+0

我只能在IE7中重現這一點。我確認FF 3.6,Chrome 4和IE8不會拋出錯誤(未測試IE6)。請添加IE7作爲問題或標題的一部分。 – Nick 2010-04-28 18:29:47

回答

11

我也遇到過這個問題(在IE7及更高版本中,不在IE6中)。

我能找到的唯一解決方案是在try/catch塊中封裝window.location.href調用。

以下是重現問題的完整示例。如果你取消了try/catch的註釋,那麼它可以在所有瀏覽器中按需要運行。

的JavaScript(在HTML頭):

window.onbeforeunload = confirmBeforeClose; 

    function confirmBeforeClose() 
    { 
    return 'You have made changes on this page that will be lost if you navigate away without saving.'; 
    } 

    function leavePage() 
    { 
    // try { 
      window.location.href = "http://www.example.com"; 
    // } catch(e) { } 
    } 

HTML:

 
<body> 
<a href="#" onclick="leavePage(); return false;">Leave this page</a> 
</body> 
+2

對於未來的訪問者:現在我只是在IE9上修復它,所以它顯然不是IE7。 – 2013-05-21 19:44:09

+1

...和IE11以及! – nitram 2016-03-29 12:54:18

+0

..........和邊緣 – 2017-01-30 15:21:08