>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Разработка http://forum.mozilla-russia.org/viewforum.php?id=18 >iframe http://forum.mozilla-russia.org/viewtopic.php?id=21519 |
chikanok > 11-02-2008 11:14:21 |
Привет. Выделить код Код:var fr=document.createElement('iframe'); fr.setAttribute('src','http://ya.ru'); window._content.document.body.appendChild(fr); Такой код делает редирект всей страницы на ya.ru. Добавлено Mon Feb 11 11:42:54 2008 : |
chikanok > 11-02-2008 13:09:10 |
Если написать так Выделить код Код:var fr=document.createElement('iframe'); fr.setAttribute('src','http://ya.ru'); window._content.document.body.appendChild(fr); то во фрейм грузятся данные,но он не отображается. Выделить код Код:var fr=document.createElement('IFRAME'); fr.setAttribute('src','http://ya.ru'); window._content.document.body.appendChild(fr); то фрейм отображается,но данные не загружает. |
Anton > 11-02-2008 14:59:48 |
Выделить код Код:var doc = getBrowser (). contentDocument; var fr = doc.createElement('iframe'); fr. setAttribute ('src','http://ya.ru'); doc. body. appendChild (fr); |
homo_nudus > 11-02-2008 14:59:53 |
Скрипт на странице не позволит запихнуть её во фрейм: при обнаружении любых фреймов скрипт перегружает всю страницу (поэтому предыдущий совет тоже не работает, как нужно). Можно сделать на Аяксе, но для начала несколько соображений о старом коде. Во-первых, объект window._content устарел - лучше писать window.content (см. здесь) Во-вторых, для совместимости с грядущей третьей версией, код создания элемента нужно переписать, потому что в этой версии вставлять в документ можно только те элементы, которые в этом же документе созданы - иначе их сначала нужно импортировать. В третьих, может быть будет логичнее сначала вставить элемент, потом грузить страницу. Далее - у iframe есть свойство src (см. здесь), поэтому проще обратиться к нему напрямую. Поэтому, если Вы будете делать такой код для другой странички, которая не принуждает к редиректу, то лучше писать так: Выделить код Код:var fr1=window.content.document.createElement('iframe'); window.content.document.body.appendChild(fr1); fr1.src = 'http://ya.ru'; Теперь вариант на Аяксе, не очень красивый, но, кажется, работает: Выделить код Код:var doc = window.content.document; var body = doc.body; var container = doc.createElement("div"); container.setAttribute("style", "border:1px solid black;margin:10px;width:50%;height:200px;overflow:auto;"); body.insertBefore(container, body.firstChild); var req = new XMLHttpRequest(); req.open("GET", "http://ya.ru", true); req.onload = function() { container.innerHTML = this.responseText; var style = container.getElementsByTagName("style")[0]; while (style) { style.parentNode.removeChild(style); style = container.getElementsByTagName("style")[0]; } container.getElementsByTagName("form")[0].target = "_blank"; container.getElementsByTagName("form")[0].getElementsByTagName("input")[0].focus(); } req.onerror = function() { body.removeChild(container); } req.send(null); Что нужно изменить во внешнем виде и поведении, подправьте сами — конечно, у меня вышел очень субъективный вариант. |
cerberus > 11-02-2008 15:16:31 |
homo_nudus пишет
Смешно говорить, но у меня когда- то идентичный код (где в качестве тестовой странички был http://ya.ru) перегружал полностью страницу и редиректил на яндекс, притом что с http://google.com было всё нормально |
homo_nudus > 11-02-2008 15:27:36 |
cerberus пишет
Ну да, это я просто в качестве примера поставил. В коде страницы http://ya.ru можно посмотреть (правда, весь скрипт одной строкой будет): Выделить код Код:body onload=" if (self.parent.frames.length!=0) self.parent.location=document.location; else { var t=document.forms[0].text; try { t.type='search' } catch(e){}; t.focus(); } " |
Shutnik > 11-02-2008 22:55:40 |
бился с проверкой на загрузку контента/нод, но всё решилось гораздо проще: Выделить код Код:window.frames.length = 0; var fr = document.createElement('iframe'); fr.setAttribute('src','ya.ru.htm'); document.body.appendChild(fr); работает |
homo_nudus > 11-02-2008 23:43:54 |
Shutnik пишет
Это подло! :) Бедный скрипт :) |
chikanok > 12-02-2008 13:13:08 |
всем спасибо. это сделал. Есть ещё вот такой вопрос: Так я ловлю событие загрузки окна,а как поймать это событие для моего iframe? |
Shutnik > 12-02-2008 13:24:32 |
Выделить код Код:window.addEventListener('DOMFrameContentLoaded', function (event) { if(event.originalTarget == fr) alert('loaded'); }, false); |