iframe上的持久变量?

时间:2011-09-25 11:41:40

标签: javascript iframe persistent-data

我有<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,所以如果有人能提出更好的解决方案,我将非常感激。

2 个答案:

答案 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>等)时,会引用最顶层的上下文。