Постоянная переменная в iframe? - PullRequest
1 голос
/ 25 сентября 2011

У меня динамически создается <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, кроме как присвоив ему идентификатор и сохранив его.Я хотел бы избежать таких произвольных идентификаторов, поэтому, если кто-то может предложить лучшее решение, я был бы очень признателен.

Ответы [ 2 ]

1 голос
/ 25 сентября 2011

Используйте этот код:

//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 голосов
/ 25 сентября 2011

Страницы, загруженные в ваш <iframe>, могут использовать "window.parent", чтобы попасть на содержащую страницу.Таким образом, вместо того, чтобы хранить некоторую «волшебную» ссылку в <iframe>, сохраните ее на содержащей странице и попросите «дочерние» страницы ее найти.

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

В дополнение к «родительскому»,Свойство "top" элемента "window" ссылается на самый верхний контекст, когда цепочка окон (фреймов) длиннее одного шага (например, <iframe> в <iframe> и т. д.).

...