Pull to refresh

Comments 71

Ээх… Сталкивался с проблемой точь в точь такой же (подгрузка страницы в ифрейм и изменение размеров этого ифрейма чтобы избавиться от скролла). Решения не нашел :(
Ставлю 1$ что его не существует :)
P.S. Кстати заметил, что в свете последних публикаций «ставьте картинки в топики, чтоб их больше смотрели», топиков с картинками резко прибавилось :)
Мало ставите, чтобы способ появился =)
Написал вот и тут же родилась идея:

Страница slave.com/frame.html:
top.location = top.location + "#height=1000"

Кто проверит, работает ли? (Нет сейчас сервера под рукой.)
не работает.

вот этот вариант работает:
parent.document.getElementById('iframe').style.height='1000px';
Это не сработает, когда parent на другом домене, чем iframe.
черт, удалите срочно. Доллар то не лишний! )
А, ну тогда Вы проиграли :) Зато сможете изменять размеры фреймов :)
Недавно сам таким же занимался просто, исследовал варианты. Правда остановился на server-side proxy.
похожа на Дженнифер Лав Хьюитт :)
Тоже так сначала подумал. Похожа
Обладательница высшей фигуры…
UFO just landed and posted this here
Не читал статью, но из-за Boobs-эффекта :)
UFO just landed and posted this here
UFO just landed and posted this here
а ты думал под катом будет весь фотосет?
UFO just landed and posted this here
Почему бы просто не создать тег script и не подгрузить в него JS с другого домена?
UFO just landed and posted this here
Да, пожалуй. Я признаю, что могут быть специфические случаи, когда в соседний фрейм идёт приличный кусок данных, нужный и основном документе.
Есть и другая причина, почему тэг script на другой домен — не всегда хорошо: скрипт можно подменить на злоумышленный, и в итоге можно получить все куки главного домена и их куда-нибудь сохранить. Не всегда владелец master.com хочет, чтобы владелец slave.com видел его куки.
Не спорю, есть масса различных ограничений и всякий способ хорош в своём случае. Описанный автором вообще работает в рамках одного домена второго уровня.

Кстати, Дим, я тебе написал в «Моём круге», но ты что-то так и не ответил.
Давно есть уже сервисы, которые работают и не знают, что с другого домена грузить JS нельзя :) Например, type comment, которым регулярно пользуюсь…
UFO just landed and posted this here
UFO just landed and posted this here
Так не сработает, top.name с другого домена недоступен.

Однако про хак с window.name удалось нарыть кое-что интересное:
development.lombardi.com/?p=611
easyxdm.net/wiki/Default.aspx (а это вообще универсальная библиотека для кросс-доменного общения)
UFO just landed and posted this here
Кстати, очень остроумная идея. К сожалению, заметить изменения через for (var k in top.frames) не удается — в FireFox при смене window.name это изменение не создает новый ключ в top.frames. Однако если сделать for (var i = 300; i < 5000; i++) if (top.frames[«frm» + i]) doSomething() (т.е. перебрать все мыслимые размеры IFRAME вручную), то ключ удается обнаружить. В частности, это работает в Опере 7!

Но, к сожалению, не работает в IE8 (может, и в более ранних тоже). В них изменение window.name вообще не влияет на top.frames.
UFO just landed and posted this here
UFO just landed and posted this here
document.domain может также порождать проблемы. например, невозможно создать в DOM новый ифрэйм без указания src и положить туда произвольный контент, так как у свежесозданного ифрэйма не будет document.domain
На одном фрилансерском ресурсе предлагали 15 тысяч долларов за решение подобной задачи, но без возможности вставить произвольный яваскрипт на странице master.com. Я так и не смог придумать решение:(
Интересно там решили ?:) Ссылочку найдете? :)
www.elance.com/c/rfp/main/rfpBid.pl?jobid=16695520
Пожалуйста, правда я немного сумму приврал:) К сожалению биды размещаются закрыто, поэтому узнать о решении вряд ли выйдет.

Вкратце: есть магазин, который продает навороченные шаблоны для ebay-магазинов. Главная их фишка была в том, что стиль изменял полностью внешний вид страницы, включая формочки и контролы ebay, но после того как ebay измененил систему шаблонов, пользовательская страница стала помещаться во фрейме, который находится на другом домене и соответственно магазин потерял свою главную фишку.
UFO just landed and posted this here
а в чем проблема? передаем высоту ifram в параметрах урла этого самого iframe. итого вложенный ифрэйм знает какая у него высота.
Если не секрет, какое отношение картинка имеет к статье?
это несчастный iframe с порнушкой, который (-ая) не может получить доступ к родительской странице :)
UFO just landed and posted this here
можно сделать кросс доменный аякс запрос через dynamic script tag hack
на хабре есть про это стаитьи
Да, была у меня в молодости идея хакнуть гугл (реализовать клики по «своей» рекламе), но только разрушилась, узнав о проблеме доступа к функциям в iframe. А потом узнал еще о некоторых хитростях гугла в этом направлении и забросил идею…

А так — не тот бы был сейчас гугл )))
Насчет метода с якорем (fragment) в top.location — увы, он не работает в Опере младше 10-й версии. Почему-то при добавлении якоря к location убиваются все события на странице (включая setTimeout), так что нет никакой возможности обнаружить, что якорь появился (а также при добавлении якоря страница иногда перезагружается с сервера).
Добавил в статью UPD2 — решение про авторесайз IFRAME. Увы, в Опере младше 10 версии — это не работает, будет бесконечный цикл перезагрузки страницы.
Кажется, есть первый кандидат на кроссбраузерное решение (дописал UPD3 в конце статьи).
отлично. только сегодня искал способ авторесайза iframe'a — и вот решения :)
У меня есть хорошее готовое решение для этой проблемы. Есть поддержка переходов по страницам внутри ифрэйма, поддержка динамического изменения высоты. С удовольствием опубликовал бы, но кармы не хватает. Сколько кармы нужно, чтобы опубликовать хотя бы в личный блог?
Странно, что никто не упомянул про то, что почти все решения описаны здесь и здесь. Правда по поводу XhrIframeProxy там не совсем точно описано, а готовое решение можно посмотреть в исходниках dojo toolkit. Когда мне это всё понадобилось, долго думал по поводу необходимости иметь специальную html страничку(с js кодом, который реализует передачу данных) на обоих доменах, что не всегда возможно, лучшее что придумал — подгрузить хостовую страницу ещё раз… Но это лишний клиентский траффик, накрутка рекламы и посещаемости. Если всеми данными недостатками не заморачиваться — вроде бы работает. По поводу Opera — точно не скажу, возможно не во всех версиях, но можно проверить. К тому же dojo обещает кроссбраузерность.
UFO just landed and posted this here
а если внутри iframe происходит переход на другие страницы и при этом изменяется высота контента?
В ИЕ если ходить по ссылкам внутри ифрэйми то каждый раз от куда-то нужно получать УРЛ внешнего окна для кода
top.location.replace("http://master.com/#h" + h);
таким образом информацию полученную из «ret» при инициализации ифрэйма
iframe src="http://slave.com/iframe.html?ret=http://master.com/"
нужно где-то сохранять. Или в куку писать, или в тотже window.name прописывать и использовать window.name как хранилище.

И ещё, этот код внутри ифрэйма (когда в отдельно окне, то всё ОК) document.body.scrollHeight, при переходу по ссылкам, возвращает максимальное из ранее полученных высот (такое поведение во многих браузерах). Таким образом ифрэйм может только растягиваеться.

Вобщем из-за кучи особенностей, из-за которых можно внезапно отхватить пришлось отказаться от этого подхода.
Sign up to leave a comment.

Articles