Комментарии 71
Ээх… Сталкивался с проблемой точь в точь такой же (подгрузка страницы в ифрейм и изменение размеров этого ифрейма чтобы избавиться от скролла). Решения не нашел :(
Ставлю 1$ что его не существует :)
Ставлю 1$ что его не существует :)
0
Написал вот и тут же родилась идея:
Страница slave.com/frame.html:
top.location = top.location + "#height=1000"
Кто проверит, работает ли? (Нет сейчас сервера под рукой.)
Страница slave.com/frame.html:
top.location = top.location + "#height=1000"
Кто проверит, работает ли? (Нет сейчас сервера под рукой.)
+1
Посмотрите тут
+12
+4
Что за девушка на фото? О:)
+1
НЛО прилетело и опубликовало эту надпись здесь
Почему бы просто не создать тег script и не подгрузить в него JS с другого домена?
+1
НЛО прилетело и опубликовало эту надпись здесь
Есть и другая причина, почему тэг script на другой домен — не всегда хорошо: скрипт можно подменить на злоумышленный, и в итоге можно получить все куки главного домена и их куда-нибудь сохранить. Не всегда владелец master.com хочет, чтобы владелец slave.com видел его куки.
0
Давно есть уже сервисы, которые работают и не знают, что с другого домена грузить JS нельзя :) Например, type comment, которым регулярно пользуюсь…
0
НЛО прилетело и опубликовало эту надпись здесь
А что это за хак? Можно ссылочку?
0
НЛО прилетело и опубликовало эту надпись здесь
Так не сработает, 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 (а это вообще универсальная библиотека для кросс-доменного общения)
+1
И еще отличный пост вот этот: habrahabr.ru/blogs/javascript/41669/
Там интересный прием с about:blank (интересно, работает ли он во всех браузерах).
Там интересный прием с about:blank (интересно, работает ли он во всех браузерах).
0
НЛО прилетело и опубликовало эту надпись здесь
Кстати, очень остроумная идея. К сожалению, заметить изменения через 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.
0
НЛО прилетело и опубликовало эту надпись здесь
фотка хорошая )
+1
document.domain может также порождать проблемы. например, невозможно создать в DOM новый ифрэйм без указания src и положить туда произвольный контент, так как у свежесозданного ифрэйма не будет document.domain
0
На одном фрилансерском ресурсе предлагали 15 тысяч долларов за решение подобной задачи, но без возможности вставить произвольный яваскрипт на странице master.com. Я так и не смог придумать решение:(
+2
Интересно там решили ?:) Ссылочку найдете? :)
0
www.elance.com/c/rfp/main/rfpBid.pl?jobid=16695520
Пожалуйста, правда я немного сумму приврал:) К сожалению биды размещаются закрыто, поэтому узнать о решении вряд ли выйдет.
Вкратце: есть магазин, который продает навороченные шаблоны для ebay-магазинов. Главная их фишка была в том, что стиль изменял полностью внешний вид страницы, включая формочки и контролы ebay, но после того как ebay измененил систему шаблонов, пользовательская страница стала помещаться во фрейме, который находится на другом домене и соответственно магазин потерял свою главную фишку.
Пожалуйста, правда я немного сумму приврал:) К сожалению биды размещаются закрыто, поэтому узнать о решении вряд ли выйдет.
Вкратце: есть магазин, который продает навороченные шаблоны для ebay-магазинов. Главная их фишка была в том, что стиль изменял полностью внешний вид страницы, включая формочки и контролы ebay, но после того как ebay измененил систему шаблонов, пользовательская страница стала помещаться во фрейме, который находится на другом домене и соответственно магазин потерял свою главную фишку.
0
НЛО прилетело и опубликовало эту надпись здесь
poll.rufox.ru — не совсем то, но все же…
0
а в чем проблема? передаем высоту ifram в параметрах урла этого самого iframe. итого вложенный ифрэйм знает какая у него высота.
0
Если не секрет, какое отношение картинка имеет к статье?
-1
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/
+1
можно сделать кросс доменный аякс запрос через dynamic script tag hack
на хабре есть про это стаитьи
на хабре есть про это стаитьи
0
Да, была у меня в молодости идея хакнуть гугл (реализовать клики по «своей» рекламе), но только разрушилась, узнав о проблеме доступа к функциям в iframe. А потом узнал еще о некоторых хитростях гугла в этом направлении и забросил идею…
А так — не тот бы был сейчас гугл )))
А так — не тот бы был сейчас гугл )))
-1
Насчет метода с якорем (fragment) в top.location — увы, он не работает в Опере младше 10-й версии. Почему-то при добавлении якоря к location убиваются все события на странице (включая setTimeout), так что нет никакой возможности обнаружить, что якорь появился (а также при добавлении якоря страница иногда перезагружается с сервера).
0
Добавил в статью UPD2 — решение про авторесайз IFRAME. Увы, в Опере младше 10 версии — это не работает, будет бесконечный цикл перезагрузки страницы.
0
Не давайте ссылки, пожалуйста, через тэги — хабр приво слово «script» в них обрабатывает.
Вот кликабельная ссылка: www.emposha.com/javascript/cross-domain-javascript-execution-library.html
Вот кликабельная ссылка: www.emposha.com/javascript/cross-domain-javascript-execution-library.html
+1
Кажется, есть первый кандидат на кроссбраузерное решение (дописал UPD3 в конце статьи).
0
отлично. только сегодня искал способ авторесайза iframe'a — и вот решения :)
0
У меня есть хорошее готовое решение для этой проблемы. Есть поддержка переходов по страницам внутри ифрэйма, поддержка динамического изменения высоты. С удовольствием опубликовал бы, но кармы не хватает. Сколько кармы нужно, чтобы опубликовать хотя бы в личный блог?
0
Спасибо — jamayka.habrahabr.ru/blog/78845/
+1
Странно, что никто не упомянул про то, что почти все решения описаны здесь и здесь. Правда по поводу XhrIframeProxy там не совсем точно описано, а готовое решение можно посмотреть в исходниках dojo toolkit. Когда мне это всё понадобилось, долго думал по поводу необходимости иметь специальную html страничку(с js кодом, который реализует передачу данных) на обоих доменах, что не всегда возможно, лучшее что придумал — подгрузить хостовую страницу ещё раз… Но это лишний клиентский траффик, накрутка рекламы и посещаемости. Если всеми данными недостатками не заморачиваться — вроде бы работает. По поводу Opera — точно не скажу, возможно не во всех версиях, но можно проверить. К тому же dojo обещает кроссбраузерность.
0
Расшифровываю ссылки, т.к. «здесь» — бьется:
javascript.ru/ajax/cross-domain-scripting
javascript.ru/ajax/cross-origin-2
javascript.ru/ajax/cross-domain-scripting
javascript.ru/ajax/cross-origin-2
0
НЛО прилетело и опубликовало эту надпись здесь
а если внутри iframe происходит переход на другие страницы и при этом изменяется высота контента?
0
В ИЕ если ходить по ссылкам внутри ифрэйми то каждый раз от куда-то нужно получать УРЛ внешнего окна для кода
таким образом информацию полученную из «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
, при переходу по ссылкам, возвращает максимальное из ранее полученных высот (такое поведение во многих браузерах). Таким образом ифрэйм может только растягиваеться.Вобщем из-за кучи особенностей, из-за которых можно внезапно отхватить пришлось отказаться от этого подхода.
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Авторесайз IFRAME и безопасный способ передачи информации с одного домена на другой