2012-03-02 42 views
1

我正在研究一個項目,該項目有許多在父窗口中打開和關閉的iframe。我有一個對象需要在iframe之間進行定義和共享。我遇到的問題是,當在頂部創建對象的iframe被關閉時,與其關聯的功能會丟失。從iframe向父窗口注入JavaScript函數

有沒有一種方法可以定義頂部對象,即使在原始iframe超出範圍之後,仍可從我的iframe訪問該對象?

+0

在父窗口的[設置變量可能重複從iframe](http://stackoverflow.com/questions/1301540/set-variable-in-parent-window-from-iframe) – 2012-03-02 19:23:08

回答

1

萬一有人絆倒了這個。我發現Javascript函數存儲爲引用,因此從iframe中定義top.func = function(){...}將創建對頂部函數的引用。這意味着如果iframe丟失了,那麼函數也是如此。

我的解決方案是創建一個隱藏在後臺並在需要定義該功能時創建的iframe。

2

你可以聲明函數作爲iframe的父窗口中的一員:

window.parent.func = function() {alert("test")}; 

他們來說,這將是每一個IFRAME可見:

window.parent.func(); 
+0

嗯我一直在嘗試這樣的事情,但我得到「不能從釋放的腳本執行代碼「裏面定義的函數的錯誤。我在想這是我錯過的東西。謝謝您的幫助! – Shaded 2012-03-02 19:34:16

+0

進一步思考,每個iframe只能訪問父對javascript的引用。所以當原始iframe關閉時,javascript將會丟失。 – Shaded 2012-03-05 21:25:55

0

一個解決方案,可以使用查詢字符串傳遞他們的iframe的src,或將對象存儲在服務器會話中。

0

我們遇到了這個問題和這個問題,最終通過在父文檔頭部創建一個腳本標籤來解決它。

所以不是

window.parent.myfunc = function(){...} 

我們做

var script = window.parent.document.createElement('script'); 
script.text = "var myfunc = function(){...}"; 
window.parent.document.getElementsByTagName('head')[0].appendChild(script); 

有點難看,但它的工作原理。

1

您可以通過它的構造函數在父窗口上創建一個函數。 在這種情況下,函數的引用保留在父窗口上,並且可以從所有的iFrame被稱爲

parent.func = new parent.Function('a','b','alert(a+b);'); 

這將是可見的每一個的iFrame

parent.func(3,4);