2009-08-12 47 views
3

我的主要HTML頁面執行以下操作:當彈出窗口完成父代啓動的加載時,如何通知父頁面?

var popup = window.open(...); 
// Wait for popup to load 
popup.onload = function() { do_something(); }; 
popup.location = "new-page.html"; 

我想do_somethingnew-page.html完成加載調用。但是,我目前沒有工作 - do_something永遠不會被調用。

我該如何做這項工作?

我只關心在FF 3.5中使用這個工作,如果這樣做更容易。

+1

:)我不是在生產使用網站本;事實上,我需要這個工作,以便測試我爲Firefox編寫的補丁。 – 2009-08-12 20:45:32

回答

4

你可以使用window.opener。 <functionName>並將您的通知代碼放在父頁面上的該函數內

+0

這正是我所需要的。謝謝! – 2009-08-12 20:46:21

+1

小心window.opener。它是專有的IE瀏覽器,而不是任何標準建議的一部分,而且人們在Firefox中遇到了這個問題:codingforums.com/showthread.php?t=44015 – 2009-08-12 21:03:44

0

嘗試具有DoSomething的方法調用,在彈出的onload。您可以通過使用window.opener

0

在被加載,你可以有在調用打開的窗口上的功能(如果存在的話)結束

<script type='text/javascript'> 
if (window.opener && window.opener.do_something) window.opener.do_something(window); 
</script> 
一個簡單的襯墊您的.html指回父
1

或者,在不干擾子窗口的HTML的情況下,您可以將父監聽器附加到iframe的加載事件上。在這個解決方案中,我打算簡單地使用jQuery,但是任何庫甚至手動事件附件都可以。

在父母的HTML:

<iframe id="foo"></iframe> 
<script type='text/javascript'> 
    var element = $("#foo"); 
    element.load(function(eventObject) { 
     // do something here 
    }); 
    // Now that the event listener is attached, we can set the source. 
    element[0].src = "foo.html"; 

</script> 

注意,我沒有嘗試過第一次設置源,然後安裝監聽器,我不知道這是否會保證始終工作。可能發生iframe在加載偵聽器被連接之前被創建/加載,我不確定。但是,通過在連接監聽器之後設置src,我確信負載監聽器將被調用。

巴蒂爾

http://www.shanetomlinson.com

http://www.ubernote.com

+0

我很好奇,如果你能在沒有jQuery的情況下工作,彈出而不是iframe。這基本上是我原本給出的例子中我想要做的,但我無法使它工作。 (IIRC,我可以通過設置iframe.onload = do_something來使其工作。) – 2009-08-12 20:42:49

相關問題