2011-11-16 90 views
0

我有兩個窗口:parentpopup。顯然parent有參考popup。現在popup我有一個函數說從父窗口中的子窗口運行函數

function test() { alert('test'); } 

,我想調用這個函數在parent,像popup.test();。有沒有辦法做到這一點?我知道如何以相反的方式做到這一點。只要聲明

window.test = function() { alert('test'); } 

並在彈出窗口調用window.opener.test();工作正常。然而,這不適用於我的情況(我認爲因爲window.opener對象是一個參考,但window.openwindowpopup沒有真正相關)。有任何想法嗎?

回答

1

它確實取決於您爲彈出窗口定義函數的上下文。假設你隨附的功能/數據,以彈出窗口的window對象時,可以從窗口訪問句柄window.open返回(窗口處理用於彈出的window對象):

var w = window.open(somelocation,''); //has a function on `window` called "test" 
w.test(); 

我會假設你懂得安全沙箱中的彈出窗口的工作方式

+0

其實這個函數是在'popup'裏面定義的。我需要訪問彈出的HTML。 – freakish

+0

那麼,我想我可以重構我的代碼,所以這個解決方案將足夠好。 :)我會標記你的答案,謝謝! – freakish

+0

一旦你有權訪問窗口句柄,就可以通過'w.document'訪問窗口的文檔,這將允許你調用'w.document.getElementById'或者其他你需要的函數。在Windows之間傳遞數據時要小心。一個窗口中的對象可能會在另一個窗口中出現奇怪的情況,這取決於調用它的上下文。 – zzzzBov

0

在彈出聲明test()如下:

window["test"] = function() 
{ 
    alert("It works!"); 
} 

然後從主窗口中打開彈出式窗口:

var popup = window.open("popup.html", "The popup"); 

,並致電功能:(!沒有/show因爲跨域限制將無法正常工作)

popup.window.test(); 

的jsfiddle :http://jsfiddle.net/szK3F/show/

+0

我試過這個,它不起作用。 :(無論如何,請多多指教! – freakish

+0

你的網址是否在同一個域名中? – ComFreek

+0

是的,他們是。我使用的是Chrome。實際上'popup'根本沒有網址,它是空白的,內容是通過'popup.document .write'。 – freakish