Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Фреймы и document (https://javascript.ru/forum/events/23790-frejjmy-i-document.html)

Почемучкин 06.12.2011 16:40

Фреймы и document
 
При обращении к свойству document у фрейма иногда выполнение скрипта прекращается.
У некоторых фреймов похоже нету свойства document. Как определить его наличие?
Пробовал так:

alert( window.frames[i] ); //здесь показывает наличие объекта
alert( window.frames[i].document ); //здесь или показывает наличие document, или вообще не вывоодится

и так:

alert( typeof window.frames[i].document );


Причем в случае сбоя - сам фрейм существует, а вот при любом обращении к его .document выполнение скрипта прерывается (alert не выводится).

Мне надо хотя-бы игнорировать такие фреймы. Как определить, что у этого фрейма document лучше не трогать?

melky 06.12.2011 17:16

сравнивать URL с текущим или проверять, если до document, в обёртке

try { getDoc(); } catch(e){/*ошибка при получении свойства*/}

Почемучкин 06.12.2011 22:21

о, спасибо.

а вообще в чем может быть проблема - как-то странно, что скрипт сразу вылетает?...

devote 06.12.2011 22:41

Цитата:

Сообщение от Почемучкин
а вообще в чем может быть проблема - как-то странно, что скрипт сразу вылетает?...

Нужно дождаться загрузки фрейма.

Pattern 07.12.2011 22:24

в своё время мне было достаточно следующей функции, чтобы получить документ iFrame.
function getIFrameDoc(obj){
    return obj.contentWindow.document || obj.contentDocument || obj.document || null;
}

Попробуй, может для фрейма то же прокатит.

Почемучкин 07.12.2011 22:56

devote,
все фреймы уже были давно загружены

Pattern,
ух ты, сразу три способа - спасибо, попробую)

Маэстро 08.12.2011 03:42

Цитата:

Сообщение от Почемучкин (Сообщение 141052)
При обращении к свойству document у фрейма иногда выполнение скрипта прекращается.
У некоторых фреймов похоже нету свойства document. Как определить его наличие?

1. У всех фреймов есть свойство document. Иначе бы они не работали. Фрейм - это как бы браузер в браузере.
2. Что Вы хотите поиметь от этого свойства? Если фрейм в чужом домене (ссылка на него ведет на чужой сайт), то политика безопасности браузера не позволит до него достучаться - в результате в этой точке скрипта произойдет ошибка и дальше скрипт выполняться не будет.

Почемучкин 08.12.2011 23:43

Маэстро

Вот, похоже в этом проблема. И что - даже прочитать нельзя?

melky 08.12.2011 23:50

ничего нельзя. это не ваше. к чужому руки не тянуть! на чужое не заглядываться!

Маэстро 08.12.2011 23:58

Цитата:

Сообщение от Почемучкин (Сообщение 141500)
Маэстро
Вот, похоже в этом проблема. И что - даже прочитать нельзя?

Вы же не рассказываете подробно, что эти фреймы содержат, для чего Вы их хотите использовать, насколько сложны их внутренности...?
Вообще кое-что сделать можно (в некоторых частных случаях). Например, есть такая методика, которая называется проксирование сервера. т.е. Вы сначала закачиваете контент чужого сайта к себе на сервер, а потом отдаёте его клиенту в браузер уже от имени своего домена...


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