我正在研究一個項目,該項目有許多在父窗口中打開和關閉的iframe。我有一個對象需要在iframe之間進行定義和共享。我遇到的問題是,當在頂部創建對象的iframe被關閉時,與其關聯的功能會丟失。從iframe向父窗口注入JavaScript函數
有沒有一種方法可以定義頂部對象,即使在原始iframe超出範圍之後,仍可從我的iframe訪問該對象?
我正在研究一個項目,該項目有許多在父窗口中打開和關閉的iframe。我有一個對象需要在iframe之間進行定義和共享。我遇到的問題是,當在頂部創建對象的iframe被關閉時,與其關聯的功能會丟失。從iframe向父窗口注入JavaScript函數
有沒有一種方法可以定義頂部對象,即使在原始iframe超出範圍之後,仍可從我的iframe訪問該對象?
萬一有人絆倒了這個。我發現Javascript函數存儲爲引用,因此從iframe中定義top.func = function(){...}將創建對頂部函數的引用。這意味着如果iframe丟失了,那麼函數也是如此。
我的解決方案是創建一個隱藏在後臺並在需要定義該功能時創建的iframe。
你可以聲明函數作爲iframe的父窗口中的一員:
window.parent.func = function() {alert("test")};
他們來說,這將是每一個IFRAME可見:
window.parent.func();
一個解決方案,可以使用查詢字符串傳遞他們的iframe的src,或將對象存儲在服務器會話中。
我們遇到了這個問題和這個問題,最終通過在父文檔頭部創建一個腳本標籤來解決它。
所以不是
window.parent.myfunc = function(){...}
我們做
var script = window.parent.document.createElement('script');
script.text = "var myfunc = function(){...}";
window.parent.document.getElementsByTagName('head')[0].appendChild(script);
有點難看,但它的工作原理。
您可以通過它的構造函數在父窗口上創建一個函數。 在這種情況下,函數的引用保留在父窗口上,並且可以從所有的iFrame被稱爲
parent.func = new parent.Function('a','b','alert(a+b);');
這將是可見的每一個的iFrame
parent.func(3,4);
在父窗口的[設置變量可能重複從iframe](http://stackoverflow.com/questions/1301540/set-variable-in-parent-window-from-iframe) – 2012-03-02 19:23:08