我的問題有點類似於this SO問題。但是,由於我的實現有點不同,所以我創建了一個新問題。Google Chrome的Javascript重定向問題
我有一個頁面,後退按鈕將被禁用(經過大量的搜索後得到腳本)。這個頁面做的是重定向到不同的位置(ASP.NET MVC控制器動作)。由於該操作需要時間才能完成,因此會顯示一條等待消息。以下是我用來禁用後退按鈕並重定向頁面的腳本。
<script type="text/javascript">
function changeHashOnLoad() {
window.location.href += "#";
setTimeout(changeHashAgain, 50);
}
function changeHashAgain() {
window.location.href += "1";
}
var storedHash = window.location.hash;
window.setInterval(function() {
if (window.location.hash != storedHash) {
window.location.hash = storedHash;
}
}, 50);
//do after all images have finished loading
$(window).load(function() {
changeHashOnLoad();
//show the wait message
$("#domWaitMessage").show();
//redirect to the new page/controller action
window.location.href = document.forms[0].action;
});
</script>
我上面的代碼適用於IE和Firefox,但不適用於Chrome。 Opera中的屏幕閃爍很多,但重定向仍然有效。在Chrome中,我的控制器中的操作確實被調用並且處理髮生,但是處理完成後,頁面不會重定向。你們大多數人可能會覺得需要改變流程/實施,但我沒有發言權,所以必須堅持這個流程。
Platform: ASP.NET MVC 2.0
jQuery Version: 1.4.1
Chrome Version: 16.0.912.63m
UPDATE:
下面是小提琴手和鍍鉻網片拍攝的屏幕截圖。
提琴手:
Fiddler Screenshot http://img43.imageshack.us/img43/638/200response.png
鉻:
Chrome Screenshot http://img594.imageshack.us/img594/6381/chromenetwork.png
HTML
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Dummy Title</title>
</head>
<body>
<form id="form1" method="post" action="Home/BookingConfirmation">
<div id="domWaitMessage">
<img src="Content/images/preloader.gif" alt="Please Wait...." />
</div>
</form>
</body>
</html>
UPDATE工作腳本
<script type="text/javascript">
function changeHashOnLoad() {
window.location.href += "#";
setTimeout(changeHashAgain, 50);
}
function changeHashAgain() {
window.location.href += "1";
}
var storedHash = window.location.hash;
window.setInterval(function() {
if (window.location.hash != storedHash) {
window.location.hash = storedHash;
}
}, 50);
//do after all images have finished loading
$(window).load(function() {
changeHashOnLoad();
//show the wait message
$("#domWaitMessage").show();
//ORIGINAL REDIRECTION CODE
//window.location.href = document.forms[0].action;
//NEW WORKING REDIRECTION CODE
setTimeout(function() { window.location.href = document.forms[0].action; }, 100);
});
</script>
我懷疑這是*原因*,但僅供參考,您的'setTimeout'很奇怪,因爲您在超時時間內使用了一個字符串。另外,你不需要函數調用的字符串。你可以用下面的代碼替換那行:'setTimeout(changeHashAgain,50);' – Jacob 2011-12-27 18:17:44
@Jacob,嘗試過但仍然不起作用。但你的建議看起來更清潔,謝謝! – 2011-12-28 04:45:02