我有<div>
动态创建,它包含<iframe>
。 <iframe>
可能会自行关闭,此时会移除<div>
。
到目前为止,我有:
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
将持久数据存储到窗口,但它仅限于可以序列化的数据。据我所知,您不能序列化DOM节点,除了通过为其分配ID并存储它。我想避免使用这种任意ID,所以如果有人能提出更好的解决方案,我将非常感激。
答案 0 :(得分: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;
}
}
答案 1 :(得分:0)
加载到<iframe>
的网页可以使用&#34; window.parent&#34;进入包含页面。因此,而不是保留一些魔法&#34; <iframe>
中的引用,将其保留在包含页面上并让#34; child&#34;页面寻找它。
function closeMe() { // inside the iframe page
window.parent.frameContainer.removeChild(window.parent.removableFrame);
}
除了&#34;父母&#34;,&#34; top&#34; &#34; window&#34;的属性当一个窗口(框架)链长于一步(因此,<iframe>
中的<iframe>
等)时,会引用最顶层的上下文。