2010-08-04 82 views
0

我使用jQuery的動畫一些DOM元素,但我希望頁面動畫完成時重新加載,所以我想這:JavaScript在關閉/匿名函數中重新加載頁面?

function childDisablePopup() 
{ 
    $("#popup2",window.parent.document).animate({ 
     width: "0px", 
     marginLeft: 0 
    }, "fast", 
    function() 
    { 
     $("#popup2",window.parent.document).animate({ 
      height: "0px", 
      marginTop: 0 
     }, "fast", 
     function() 
     { 
      $("#backgroundPopup",window.parent.document).fadeOut("fast", 
       function() 
       { 
        $("#popup2",window.parent.document).remove(); 
        window.location.reload(true); 
       }); 
     }); 
    }); 
} 

然而,當動畫完成的,而不是重新加載頁面,我得到這個錯誤:

uncaught exception: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIDOMLocation.reload]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: etc...]

這是怎麼回事?頁面重新加載不能放在函數中(){} closure?

注意:瀏覽器:firefox 3.6.8。

觀衆的瀏覽器:Firefox 3以上,鉻,Safari 5以上

注:我也嘗試過window.location.reload(true);其返回同樣的錯誤,我試圖window.location.href=window.location.href其返回:

uncaught exception: [Exception... "Component returned failure code: 0x80004003 (NS_ERROR_INVALID_POINTER) [nsIDOMLocation.href]" nsresult: "0x80004003 (NS_ERROR_INVALID_POINTER)" location: "JS frame :: etc...]

+0

'window.location.href'可能不會接受賦值。試試'window.location.replace(window.location.href);'?我開始傾向於最初的想法,那就是試圖與父窗口的DOM進行交互......坦率地說,我很難過。 – 2010-08-04 18:44:31

+0

我似乎無法重現異常。 (我也使用Firefox 3.6.8)除了我沒有在選擇器中使用'window.parent.document',所以它可以是你的腳本中的其他地方。 – casablanca 2010-08-04 19:04:57

+0

好吧,這很奇怪,我甚至不能做'alert(window.location.href)'而不拋出相同的異常。 – 2010-08-04 22:31:34

回答

0

問題解決。我正在做的是打開一個iframe,然後刪除它。我想在iframe刪除時觸發頁面重新加載,但是,該腳本是從iframe中運行的,所以當iframe不再存在時,腳本不再有運行的上下文。實質上,當窗口不存在時,我無法調用window.location!然而,window.parent.location也不起作用,因爲一旦iframe消失,我實際上調用了null.parent,它也不存在。我想我可能不得不改變設計了一下。多謝你們!

3

window.location.reload()不採用任何參數,而不像調用JavaScript函數,在調用瀏覽器API函數時,瀏覽器對可以/必須傳遞給該函數的參數數量非常嚴格。

編輯:感謝OP指出這一點,Firefox至少允許一個參數傳遞給reload()。 (見http://developer.mozilla.org/en/window.location

+0

實際上,根據MDC:https://developer.mozilla.org/en/window.location reload()需要1個參數,forceget如果設置爲true,它強制一個請求到服務器而不是簡單的重新加載來自瀏覽器緩存。 – 2010-08-04 18:30:35

+0

好的電話,我的goto JS參考失敗了。 http://www.w3schools.com/jsref/met_loc_reload。asp – 2010-08-04 18:41:12

+0

嗯,在這種情況下,forceget參數可能是一個firefox唯一的實現。 window.location對象不是ECMA的javascript規範的一部分,所以我猜可能是依賴於瀏覽器的實現。我似乎無法找到webkit的javascript文檔。 – 2010-08-04 18:54:01

0

我有同樣的確切問題。 我通過只在頁面加載時調用代碼來解決這個問題。 對我來說,下面的腳本都起作用了。

window.addEventListener ("DOMContentLoaded", doStuff, false); 

window.addEventListener ("load", doStuff, false); 

如果這兩個作品你喜歡的第一個。

相關問題