Доступ к контенту внутри 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, время: 06:08. |