Постоянная переменная в 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>
так далее).