Постоянная переменная в iframe?

У меня есть <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 ответа

Решение

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

//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;
    }
}

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

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

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

Другие вопросы по тегам