Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.07.2008, 12:20
Интересующийся
Отправить личное сообщение для Smoke Посмотреть профиль Найти все сообщения от Smoke
 
Регистрация: 21.07.2008
Сообщений: 10

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

PS. Пока решил проблему так – каждый раз добавляю к frameName текущее время в секундах.
Ответить с цитированием
  #2 (permalink)  
Старый 21.07.2008, 13:11
Отправить личное сообщение для Андрей Параничев Посмотреть профиль Найти все сообщения от Андрей Параничев
 
Регистрация: 21.02.2008
Сообщений: 1,250

А через document.getElementById? Ведь window.frames['frameName'] ищет по аттрибуту name, возможно получится получить доступ через id.
Ответить с цитированием
  #3 (permalink)  
Старый 21.07.2008, 14:53
Гость
 
Сообщений: n/a

Получить доступ через id не удалось. Насколько я понимаю доступ к содержимому ифрейма (из основного документа) получается не через document, а через window.
Ответить с цитированием
  #4 (permalink)  
Старый 21.07.2008, 18:12
Интересующийся
Отправить личное сообщение для Smoke Посмотреть профиль Найти все сообщения от Smoke
 
Регистрация: 21.07.2008
Сообщений: 10

Сообщение от Гость Посмотреть сообщение
Получить доступ через id не удалось. Насколько я понимаю доступ к содержимому ифрейма (из основного документа) получается не через document, а через window.
Прошу прощения - это я забыл авторизоваться.
Ответить с цитированием
  #5 (permalink)  
Старый 21.07.2008, 19:38
Отправить личное сообщение для Андрей Параничев Посмотреть профиль Найти все сообщения от Андрей Параничев
 
Регистрация: 21.02.2008
Сообщений: 1,250

Smoke,
Попробуйте обратиться к загруженному документу через конструкцию:
// Допустим в переменной frame наш элемент iframe
var frameDoc = frame.contentWindow.document || frame.contentDocument;
Ответить с цитированием
  #6 (permalink)  
Старый 21.07.2008, 23:31
Интересующийся
Отправить личное сообщение для Smoke Посмотреть профиль Найти все сообщения от Smoke
 
Регистрация: 21.07.2008
Сообщений: 10

Сообщение от Андрей Параничев Посмотреть сообщение
frame.contentWindow.document
Да, так все работает. Спасибо!

Последний раз редактировалось Smoke, 21.07.2008 в 23:46.
Ответить с цитированием
  #7 (permalink)  
Старый 22.07.2008, 11:50
Интересующийся
Отправить личное сообщение для Smoke Посмотреть профиль Найти все сообщения от Smoke
 
Регистрация: 21.07.2008
Сообщений: 10

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

Из 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="";
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как передать значение переменной в IFRAME в поле формы JS-ом из самой страницы? DeUre Общие вопросы Javascript 14 17.12.2013 15:37
iframe | закрыть если... Geek Events/DOM/Window 5 30.09.2008 16:23
iFrame designMode = on и OnBeforePaste Dmitry Общие вопросы Javascript 1 26.08.2008 13:37
Как узнать, что IFRAME загрузился? DeUre Общие вопросы Javascript 4 01.08.2008 14:09
Iframe и https Dosuon Общие вопросы Javascript 8 27.07.2008 17:01