Comments 71
Ээх… Сталкивался с проблемой точь в точь такой же (подгрузка страницы в ифрейм и изменение размеров этого ифрейма чтобы избавиться от скролла). Решения не нашел :(
Ставлю 1$ что его не существует :)
Ставлю 1$ что его не существует :)
Написал вот и тут же родилась идея:
Страница slave.com/frame.html:
top.location = top.location + "#height=1000"
Кто проверит, работает ли? (Нет сейчас сервера под рукой.)
Страница slave.com/frame.html:
top.location = top.location + "#height=1000"
Кто проверит, работает ли? (Нет сейчас сервера под рукой.)
Посмотрите тут
Что за девушка на фото? О:)
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 (а это вообще универсальная библиотека для кросс-доменного общения)
Однако про хак с window.name удалось нарыть кое-что интересное:
development.lombardi.com/?p=611
easyxdm.net/wiki/Default.aspx (а это вообще универсальная библиотека для кросс-доменного общения)
И еще отличный пост вот этот: habrahabr.ru/blogs/javascript/41669/
Там интересный прием с about:blank (интересно, работает ли он во всех браузерах).
Там интересный прием с about:blank (интересно, работает ли он во всех браузерах).
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.
Но, к сожалению, не работает в IE8 (может, и в более ранних тоже). В них изменение window.name вообще не влияет на top.frames.
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 измененил систему шаблонов, пользовательская страница стала помещаться во фрейме, который находится на другом домене и соответственно магазин потерял свою главную фишку.
Пожалуйста, правда я немного сумму приврал:) К сожалению биды размещаются закрыто, поэтому узнать о решении вряд ли выйдет.
Вкратце: есть магазин, который продает навороченные шаблоны для ebay-магазинов. Главная их фишка была в том, что стиль изменял полностью внешний вид страницы, включая формочки и контролы ebay, но после того как ebay измененил систему шаблонов, пользовательская страница стала помещаться во фрейме, который находится на другом домене и соответственно магазин потерял свою главную фишку.
UFO just landed and posted this here
poll.rufox.ru — не совсем то, но все же…
а в чем проблема? передаем высоту ifram в параметрах урла этого самого iframe. итого вложенный ифрэйм знает какая у него высота.
Если не секрет, какое отношение картинка имеет к статье?
postMessage() API (HTML 5.0)
developer.mozilla.org/en/DOM/window.postMessage
ejohn.org/blog/postmessage-api-changes/
developer.mozilla.org/en/DOM/window.postMessage
ejohn.org/blog/postmessage-api-changes/
можно сделать кросс доменный аякс запрос через dynamic script tag hack
на хабре есть про это стаитьи
на хабре есть про это стаитьи
Да, была у меня в молодости идея хакнуть гугл (реализовать клики по «своей» рекламе), но только разрушилась, узнав о проблеме доступа к функциям в iframe. А потом узнал еще о некоторых хитростях гугла в этом направлении и забросил идею…
А так — не тот бы был сейчас гугл )))
А так — не тот бы был сейчас гугл )))
Насчет метода с якорем (fragment) в top.location — увы, он не работает в Опере младше 10-й версии. Почему-то при добавлении якоря к location убиваются все события на странице (включая setTimeout), так что нет никакой возможности обнаружить, что якорь появился (а также при добавлении якоря страница иногда перезагружается с сервера).
Добавил в статью UPD2 — решение про авторесайз IFRAME. Увы, в Опере младше 10 версии — это не работает, будет бесконечный цикл перезагрузки страницы.
Не давайте ссылки, пожалуйста, через тэги — хабр приво слово «script» в них обрабатывает.
Вот кликабельная ссылка: www.emposha.com/javascript/cross-domain-javascript-execution-library.html
Вот кликабельная ссылка: www.emposha.com/javascript/cross-domain-javascript-execution-library.html
Кажется, есть первый кандидат на кроссбраузерное решение (дописал UPD3 в конце статьи).
отлично. только сегодня искал способ авторесайза iframe'a — и вот решения :)
У меня есть хорошее готовое решение для этой проблемы. Есть поддержка переходов по страницам внутри ифрэйма, поддержка динамического изменения высоты. С удовольствием опубликовал бы, но кармы не хватает. Сколько кармы нужно, чтобы опубликовать хотя бы в личный блог?
Спасибо — jamayka.habrahabr.ru/blog/78845/
Странно, что никто не упомянул про то, что почти все решения описаны здесь и здесь. Правда по поводу XhrIframeProxy там не совсем точно описано, а готовое решение можно посмотреть в исходниках dojo toolkit. Когда мне это всё понадобилось, долго думал по поводу необходимости иметь специальную html страничку(с js кодом, который реализует передачу данных) на обоих доменах, что не всегда возможно, лучшее что придумал — подгрузить хостовую страницу ещё раз… Но это лишний клиентский траффик, накрутка рекламы и посещаемости. Если всеми данными недостатками не заморачиваться — вроде бы работает. По поводу Opera — точно не скажу, возможно не во всех версиях, но можно проверить. К тому же dojo обещает кроссбраузерность.
Расшифровываю ссылки, т.к. «здесь» — бьется:
javascript.ru/ajax/cross-domain-scripting
javascript.ru/ajax/cross-origin-2
javascript.ru/ajax/cross-domain-scripting
javascript.ru/ajax/cross-origin-2
UFO just landed and posted this here
а если внутри iframe происходит переход на другие страницы и при этом изменяется высота контента?
В ИЕ если ходить по ссылкам внутри ифрэйми то каждый раз от куда-то нужно получать УРЛ внешнего окна для кода
таким образом информацию полученную из «ret» при инициализации ифрэйма
нужно где-то сохранять. Или в куку писать, или в тотже window.name прописывать и использовать window.name как хранилище.
И ещё, этот код внутри ифрэйма (когда в отдельно окне, то всё ОК)
Вобщем из-за кучи особенностей, из-за которых можно внезапно отхватить пришлось отказаться от этого подхода.
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.
Авторесайз IFRAME и безопасный способ передачи информации с одного домена на другой