2011-09-25 73 views
1

我有一個<div>被動態創建,它包含一個。 可能會自行關閉,此時將刪除<div>iframe上的持久變量?

到目前爲止,我有:

var div = document.createElement('div'), ifr = document.createElement('iframe'); 
// some styles and stuff here, including ifr.src 
ifr.contentWindow.container = div; // Note that domains are the same 

// within the iframe's code, possibly a "close" link or after completing an operation 
container.parentNode.removeChild(container); 

它的工作原理。但是,只有在iframe中的頁面是在那裏開始的頁面。如果鏈接被點擊到另一個頁面,則不再定義window.container

我知道我可以使用window.name來存儲持久化到窗口的數據,但它只限於可以序列化的數據。據我所知,除了分配一個ID並存儲它之外,你不能序列化一個DOM節點。我想避免這種隨意的ID,所以如果任何人都可以提出更好的解決方案,我將非常感激。

回答

1

使用此代碼:

//At the frame: 
var parentFrames = parent.document.getElementsByTagName("iframe"); 
for(var i=parentFrames.length-1; i>=0; i--){ 
    if(parentFrames[i].contentWindow == window) { 
     parentFrames[i].parentNode.removeChild(parentFrames[i]); //Removes frame 
     //Add an extra `.parent` at each side of the expression to remove the `div`. 
     break; 
    } 
} 
+0

啊,是的。我已經在我的代碼的其他地方做過類似的事情,不知道爲什麼我不認爲在這裏應用:D會給它一個測試,並讓你知道。 –

+0

我沒有解釋代碼,因爲我認爲你已經在JS編程中相當先進。如果部分代碼不清楚,請隨時要求澄清。 –

+0

工程。謝謝你提醒我。 –

0

加載到您的中的頁面可以使用「window.parent」進入包含頁面。因此,不要在中保留一些「魔術」參考,請將其保留在包含頁面上並讓「子」頁面查找它。

function closeMe() { // inside the iframe page 
    window.parent.frameContainer.removeChild(window.parent.removableFrame); 
    } 

除了「父」,的「窗口」的引用,當有窗口(幀)的一個鏈上的最上面的上下文不是僅一個步驟(如此長,在一個「頂」屬性等)。

+0

解決方案有效,但前提是有一個這樣的''