Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Повторное создание iframe (https://javascript.ru/forum/events/1449-povtornoe-sozdanie-iframe.html)

Smoke 21.07.2008 12:20

Повторное создание iframe
 
Обнаружил следующую интересную вещь (проверял в ФФ2) – javascript использует создание скрытого iframe для передачи файлов из формы. Фрейм имеет id=”frameName” и name=”frameName”. Все работает но, если потом удалить этот фрейм (DOM-методом) и создать заново (так нужно) c тем же id и name, то получить доступ к его содержимому не получается (хотя содержимое туда успешно грузится), т.к. window.frames['frameName'].document всегда “null”. Какое есть этому объяснение? Это особенность ФФ?

PS. Пока решил проблему так – каждый раз добавляю к frameName текущее время в секундах.

Андрей Параничев 21.07.2008 13:11

А через document.getElementById? Ведь window.frames['frameName'] ищет по аттрибуту name, возможно получится получить доступ через id.

Гость 21.07.2008 14:53

Получить доступ через id не удалось. Насколько я понимаю доступ к содержимому ифрейма (из основного документа) получается не через document, а через window.

Smoke 21.07.2008 18:12

Цитата:

Сообщение от Гость (Сообщение 3780)
Получить доступ через id не удалось. Насколько я понимаю доступ к содержимому ифрейма (из основного документа) получается не через document, а через window.

Прошу прощения - это я забыл авторизоваться.

Андрей Параничев 21.07.2008 19:38

Smoke,
Попробуйте обратиться к загруженному документу через конструкцию:
// Допустим в переменной frame наш элемент iframe
var frameDoc = frame.contentWindow.document || frame.contentDocument;

Smoke 21.07.2008 23:31

Цитата:

Сообщение от Андрей Параничев (Сообщение 3791)
frame.contentWindow.document

Да, так все работает. Спасибо!

Smoke 22.07.2008 11:50

Ради интереса хотелось бы всетаки понять. Получается ифрейм участвует в дереве DOM в двух местах: 1) в месте нахождения тэга iframe 2) как потомок window. И при удалении элемента из первого места он всетаки остается потомком window. Можно ли его оттуда удалить? Попробовал следующую конструкцию window.removeChild(window.frames['frameName']); - безрезультатно. У window видимо нет метода removeChild()

RVK 07.02.2009 15:14

Из ECMA 3 Library
 
Уже теме пол года...
Я сам новичок, учусь, но вот, чтоя накопал...
Действительно нет такой функции.

Window.prototype= new Global();
function Window(){};

Window.prototype.document= new Document();
Window.prototype.length="";
Window.prototype.parent= new Window();
Window.prototype.top= new Window();
Window.prototype.scrollbars= new BarProp();
Window.prototype.name="";
Window.prototype.scrollX="";
Window.prototype.scrollY="";
Window.prototype.scrollTo=function(arg1,arg2){};
Window.prototype.scrollBy=function(arg1,arg2){};
Window.prototype.getSelection=function(){};
Window.prototype.scrollByLines=function(arg1){};
Window.prototype.scrollByPages=function(arg1){};
Window.prototype.sizeToContent=function(){};
Window.prototype.dump=function(arg1){};
Window.prototype.setTimeout=function(){};
Window.prototype.setInterval=function(){};
Window.prototype.clearTimeout=function(){};
Window.prototype.clearInterval=function(){};
Window.prototype.setResizable=function(arg1){};
Window.prototype.captureEvents=function(arg1){};
Window.prototype.releaseEvents=function(arg1){};
Window.prototype.routeEvent=function(arg1){};
Window.prototype.enableExternalCapture=function(){};
Window.prototype.disableExternalCapture=function(){};
Window.prototype.prompt=function(){};
Window.prototype.open=function(){};
Window.prototype.openDialog=function(){};
Window.prototype.frames= new Window();
Window.prototype.window= new Window();
Window.prototype.find=function(){};
Window.prototype.self= new Window();
Window.prototype.history= new history();
Window.prototype.content= new Window();
Window.prototype.menubar= new BarProp();
Window.prototype.toolbar= new BarProp();
Window.prototype.locationbar= new BarProp();
Window.prototype.personalbar= new BarProp();
Window.prototype.statusbar= new BarProp();
Window.prototype.directories= new BarProp();
Window.prototype.closed="";
Window.prototype.opener="";
Window.prototype.status="";
Window.prototype.defaultStatus="";
Window.prototype.innerWidth=0;
Window.prototype.innerHeight=0;
Window.prototype.outerWidth=0;
Window.prototype.outerHeight=0;
Window.prototype.screenX=0;
Window.prototype.screenY=0;
Window.prototype.pageXOffset="";
Window.prototype.pageYOffset="";
Window.prototype.scrollMaxX="";
Window.prototype.scrollMaxY="";
Window.prototype.fullScreen="";
Window.prototype.alert=function(arg1){};
Window.prototype.confirm=function(arg1){};
Window.prototype.focus=function(){};
Window.prototype.blur=function(){};
Window.prototype.back=function(){};
Window.prototype.forward=function(){};
Window.prototype.home=function(){};
Window.prototype.stop=function(){};
Window.prototype.print=function(){};
Window.prototype.moveTo=function(arg1,arg2){};
Window.prototype.moveBy=function(arg1,arg2){};
Window.prototype.resizeTo=function(arg1,arg2){};
Window.prototype.resizeBy=function(arg1,arg2){};
Window.prototype.scroll=function(arg1,arg2){};
Window.prototype.close=function(){};
Window.prototype.updateCommands=function(arg1){};
Window.prototype.atob=function(arg1){};
Window.prototype.btoa=function(arg1){};
Window.prototype.frameElement="";
Window.prototype.removeEventListener=function(arg1,arg2,arg3){};
Window.prototype.dispatchEvent=function(arg1){};
Window.prototype.getComputedStyle=function(arg1,arg2){};
Window.prototype.sessionStorage="";
Window.prototype.location=new location();
Window.prototype.event="";


Часовой пояс GMT +3, время: 07:16.