2011-09-08 114 views
4

有什麼辦法來打開一個新的窗口,的javascript從一個窗口傳遞事件到另一個

var newWindow = window.open(...); 

,然後通過從newWindow事件的揭幕戰窗口?

我想要做的是打開一個窗口,詢問一些信息,然後一旦輸入關閉新窗口並在原始窗口中觸發一個動作。

謝謝。

編輯:謝謝大家。這幾乎是我認爲它的工作原理,但我一定在做一些愚蠢的事情。下面是一些測試代碼,我一直在敲打我的頭撞牆了:

在parent.html

window.open("child.html"); 

$(window).bind("something", function(e) { 
    console.log('something happened'); 
}); 

和child.html

$("#somebutton").click(function() { 
    $(window.opener).trigger("something"); 
    window.close(); 
}); 

孩子打開罰款,我點擊按鈕和小孩關閉,但「父母」中從未發生過「某事」!

我有點喜歡它也可以用其他方式工作。任何方式來做這種工作?

var child = window.open("child.html"); 

$(child).bind("something", function() { ... }); 

謝謝。

回答

5

我毫不猶豫地插上不必要的jQuery的,但它是相當不錯的了這樣的事情:

$('#somebutton').click(function() { window.opener.$('body').trigger('someevent', somedata); }); 

只要運行在子窗口的初始化腳本行。注意:偶數必須明確地綁定到父元素中的body元素。

請注意,此處您受到單一來源策略的限制。除非瀏覽器明確允許,否則只有在兩個窗口從同一主機打開的情況下才能使用。

+0

謝謝。這幾乎正​​是我一直在嘗試(jQuery規則),但無法讓它工作。哦,是的,我想到了同樣的原始限制,但兩個文件都在同一個服務器上,所以我不認爲是這樣。 – nicholas

+0

對不起,我打電話的地方有點偏離。看到我更新的答案 – Dan

0
window.opener.blah = "meh" 

,在揭幕戰窗口設置一個JS變種(等等),以「咩」

1

事實上,這是可能的,你想看看window.addEventListener。這可用於現代瀏覽器以及IE 9.

有關更多信息和示例,請訪問this page

4

是的,你可以做到這一點。在新的窗口中,您可以通過使用window.opener訪問父窗口,這使您可以訪問父窗口的所有特性和功能,使您能夠例如做這樣的事情:window.opener.someFunctionOfMainWindow('some data from new window');

在你的情況,你可以這樣做這在新窗口中。

function dataIsEntered() { 
    window.opener.triggerAction(data); 
    window.close(); 
} 
相關問題