1

我有一个<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用来将数据持久存储到窗口,但它仅限于可以序列化的数据。据我所知,除了为它分配一个 ID 并存储它之外,你不能序列化一个 DOM 节点。我想避免这种任意的 ID,所以如果有人能提出更好的解决方案,我将不胜感激。

4

2 回答 2

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;
    }
}
于 2011-09-25T12:19:43.487 回答
0

加载到您的页面<iframe>可以使用“window.parent”来访问包含页面。因此,与其在 中保留一些“魔法”引用<iframe>,不如将其保留在包含页面上并让“子”页面查找它。

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

除了“父”之外,“窗口”的“顶部”属性引用了最顶层的上下文,当有一串窗口(框架)长于一个步骤(例如<iframe>,一个<iframe>等)时。

于 2011-09-25T12:07:49.463 回答