Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   получение ссылки на iframe из содержимого в этом iframe (https://javascript.ru/forum/events/35604-poluchenie-ssylki-na-iframe-iz-soderzhimogo-v-ehtom-iframe.html)

mister_maxim 15.02.2013 21:48

получение ссылки на iframe из содержимого в этом iframe
 
Дано:
index.html - главная страница, она содержит iframe, который содержит страницу iframe.html этого же сайта и домена.

хтмл код index.html:
<iframe id='ifr1' src='i1.html'></iframe>
<iframe id='ifr2' src='iframe.html'></iframe>
<iframe id='ifr3' src='i2.html'></iframe>

Яваскрипт в iframe.html может обратиться к родительскому окну window.parent, это многим известно, но вот как получить ссылку на ифрейм в этом родительском окне, который содержит текущее окно.
т.е. window.parent.document.getElementById('ifr2') ?

Но только это сделать без вспомогательных id и прочих механизмов, например сравнительных проверок через цикл всех iframe в index.html а более изящно, или это не возможно?

Для чего это надо: высота содержимого в iframe.html может динамически меняться, поэтому требуется соответствующим образом изменять и высоту самого iframe, присваивая тоже значение. Ну а чтобы менять высоту iframe, разумеется, нужна ссылка на него.

danik.js 15.02.2013 22:05

Можно попробовать window.frameElement. Сам не пользовался таким. В хроме точно есть. Надеюсь что это кроссбраузерное свойство. Отпишитесь по результатам тестов.

Deff 15.02.2013 22:31

Если фреймы с того же домена , то сам фрейм может сам у себя изменить высоту- ширину согласно размерам своего контента

<iframe name="iframe0" src='i1.html'></iframe>

cкрипт во фрейме исполняет такую команду
parent.iframe0.width = XX
iframe0 - имя текущего фрейма

mister_maxim 15.02.2013 22:31

Цитата:

Сообщение от danik.js (Сообщение 234562)
Можно попробовать window.frameElement. Сам не пользовался таким. В хроме точно есть. Надеюсь что это кроссбраузерное свойство. Отпишитесь по результатам тестов.

На лисе и опере тоже есть, осла не имею, спасибо, dank.js.

mister_maxim 15.02.2013 22:44

Цитата:

Сообщение от Deff (Сообщение 234570)
Если фреймы с того же домена , то сам фрейм может сам у себя изменить высоту- ширину согласно размерам своего контента

<iframe name="iframe0" src='i1.html'></iframe>

cкрипт во фрейме исполняет такую команду
parent.iframe0.width = XX
iframe0 - имя текущего фрейма

А если имя фрейму и даже id я назначать не хочу... много у меня может быть ифреймов на главной и не хочу париться с соответствиями имён с указываемых на них именами в iframe.html.
Вот window.frameElement. - вариант.
Ещё вариант:
getParentIframe=function()
{
var ifrs=window.parent.document.getElementsByTagName('iframe');
var fr;
for(var i=0; i < ifrs.length; i++ )
{
	var ifrsi=ifrs[i];
	if(ifrsi.contentWindow.document==document){fr=ifrsi; break;};
};
return fr;
};

но он неуклюж, хоть и не-такой критичный с практической точки зрения.

Deff 15.02.2013 22:48

parent.document.getElementsByTagName('iframe')[N] - N - индекс фрейма в body


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