2011-12-14 38 views
2
function test(){  
    alert("This message should show"); 
    window.location.href = "http://www.google.com"; 
    alert("This message should NOT show"); 
} 
<href="#" onClick=test()>Click Me</a> 
  • 步驟告知:第二消息不顯示。
  • 逐步使用chrome(v15,v16):兩個警報顯示。

Chrome在重定向之前吹過重定向並繼續通過其餘調用堆棧(在這種情況下,它完成onClick)。鉻未能重定向URL當經由通過使用Firefox(V8)的javascript

  • 沒有JavaScript錯誤。
  • 禁用所有擴展。
  • 我使用了一個空白的html文件,沒有加載外部文件。

有誰知道一種方法來獲得鉻來執行window.location立即更改?

+0

試着在沒有窗口的情況下運行它。如果它不起作用,請嘗試而不是在沒有窗口的情況下運行onClick – Anthony 2011-12-14 21:39:41

+0

。沒有幫助,Chrome會在重定向後繼續運行。 – 2011-12-14 22:13:21

回答

1

很確定規格給你沒有這個保證,所以我不會感到驚訝。明顯的解決方案是在之後立即拋出異常。假設你沒有catch塊在你的代碼散落,這應該工作:

throw "Aborting, redirecting you."; 

(是的,這是醜陋對不起!)

編輯:小提琴:without throwwith throw

+0

是的,這是UGLY ...但它工作=) 有更好的答案呢? 我仍然想從谷歌的傢伙更完整的回答。爲什麼在這個世界上,js引擎不會立即重定向?〜嘆〜 – 2011-12-14 21:47:15

0

你可以增加一個return

function test(){  
    alert("This message should show"); 
    window.location.href = "http://www.google.com"; 
    return; 
    alert("This message should NOT show"); 
} 
0

有一個更好的方法來做到這一點。

function test(){  
alert("This message should show"); 
return true; 
alert("This message should NOT show"); 
} 

<href="http://www.google.com" onClick="return test()">Click Me</a> 

或者,您可以使用確認來控制是否可以對點擊執行此操作。責備谷歌試圖混淆功能標準,沒有其他瀏覽器強迫你這樣做。

0

我只是想同樣的事情:使用JS重定向。在PHP腳本我有,如果某個條件是真的,我剛剛結束了功能,呼應script標籤與重定向代碼的腳本:

die("<script type='text/javascript' charset='utf-8'>\n". 
    "window.location.href='http://'+window.location.hostname+'/newdir/newfile.html';\n". 
    "</script>\n"); 

這是行不通的,我試着從控制檯執行代碼並從那裏開始工作。我以爲這是一些關於時間,所以我增加了一個的setTimeout到重定向:

die("<script type='text/javascript' charset='utf-8'>\n". 
    "var configURL = 'http://'+window.location.hostname+'/newdir/newfile.html';\n". 
    "setTimeout('window.location.href = configURL', 500);\n". 
    "</script>\n"); 

該補丁適用於現在,但我認爲應該有更好的方式來做到這一點。