Доступ к контенту внутри iframe из родительского документа
Есть страница со встроенным тегом <iframe>. И страница и подгружаемый контент находятся на одном домене. Использую способ взятый отсюда: http://learn.javascript.ru/iframes
<iframe src="javascript:'тест'" style="height:60px"></iframe> <script> var iframe = document.getElementsByTagName('iframe')[0]; var iframeDoc = iframe.contentWindow.document; iframeDoc.body.style.backgroundColor = 'green'; </script> Но не получается изменить фон бэкграунда внутри ифрейма. Вот ссылка на наглядный пример: http://www.*****.ru/frame/html.html. Что не так у меня сделано? |
Цитата:
Цитата:
|
<!DOCTYPE> <html> <body> <div class="with-frame"> <iframe src="/frame/inside.html" id="myiframe"></iframe> </div> <script type="text/javascript"> var iframe = document.getElementsByTagName('iframe')[0]; var iframeDoc = iframe.contentWindow.document; iframe.onload = function(){iframeDoc.body.style.backgroundColor = 'green'}; </script> </body> </html> Без загрузки фрейма - нет доступа к окну |
Можно просто
body.bgColor = 'green' |
Цитата:
Мне Firebug в Chrome и FF не сообщает ничего подобного. Хотя FF сообщает нечто странное (в консоли сообщает): синтаксическая ошибка на строке 1 в файле html.html. Какими средствами отладки вы пользуетесь? |
Цитата:
Цитата:
|
Уже исправил, у меня там localhost был. Теперь ссылка нормальная, но все равно цвет фон меняется всеволишь на пол секунды, почему-то, а потом снова становится белым.
Есть ли способ без всяких jquery отсрочить выполнение сценария до того, как все фреймы будут загружены? |
Цитата:
Ruslan_xDD, не учи плохому. Если что-то как-то работает, то это не значит что так и нужно делать. |
<script type="text/javascript"> var iframe = document.getElementsByTagName('iframe')[0]; var iframeDoc = iframe.contentWindow.document; iframe.onload = function(){iframeDoc.body.style.backgroundColor = 'green'}; </script> Вот мой код, который вставлен после закрывающего тега <html>. Можете посмотреть на том же самом наглядном примере http://www.*****.ru/frame/html.html, что ничего не работает. |
hrundel,
попробуйте contentDocument вместо contentWindow |
Цитата:
|
Странная фигня. На момент навешивания onload iframe.contentDocument имеет readyState = 'complete' но при этом location.href = 'about:blank'
хз, фреймы - гавно. нафиг они тебе вобще вперлись? |
Цитата:
|
danik.js, по моему ты из-за себя дурака изображаешь ;) Всё везде прекрасно работает.
|
:write:
Цитата:
|
Цитата:
http://www.******.ru/frame2/html.html |
(function() { var a = document.getElementById('myiframe'); a.onload = function() { a = a.contentWindow || a.contentDocument; a.document.body.bgColor = 'green'; } })(); Или вообще так: document.getElementById('myiframe').onload = function() { var a = this.contentWindow || this.contentDocument; a.document.body.bgColor = 'yellow'; } Оба варианта работают, проверял в опере и хроме. |
hrundel,
метод bes a))) |
Ruslan_xDD,
Спасибо. Оба твоих варианта работают. |
Цитата:
Поэтому если эквивалент - то так: var iframeDoc = iframe.contentDocument || iframe.contentWindow.document; |
Кстати, а существует ли какой-нибудь стандарт вроде ECMAScript, который регламентирует как браузеры должны действовать со встроенными фреймами и как на javascript осуществлять к ним доступ? Может что-то такое есть в w3c? Откуда разработчики браузеров знают, как в их браузерах надо реализовывать доступ к фрейму на javascript?
|
В спецификациях w3c отражаются политики доступа, да.
|
Цитата:
|
Часовой пояс GMT +3, время: 14:19. |