Тег object - как получить его document
Здравствуйте
Суть задачи в следующем. Есть тег object, в него подгружается веб страница. Необходимо: 1. Из главного документа суметь обратиться к документу, который подгружается в object 2. И обратное - из документа, подгруженного в object, обратиться к документу-родителю Есть какие-нибудь идеи? |
Цитата:
2. Вы можете в исходный текст данного дока сунуть свой скрипт на сервере ? |
1. Нет
2. Скорее нет. Предполагается, что объект будет использоваться для раздачи контента с центрального сайта на другие (примерно как встраивание роликов Ютуб). Но, теоретически, я могу добавить в генерируемый для вставки код ссылки и скрипт, в виде исходника либо ссылки. А что нам это дает? |
neon121,
Гы ... ток -что обсуждал это А скрипты свои туда пихать можно ? по типу <script type="text/javascript" src="ссылка"></script> тогда может быть возможно решить задачку |
Предположим, что да, можно. То есть, можно генерировать html вида
<object data="адрес_странички_которую_встраиваем"></object> <script src="http://сайт.ру/крутой_скрипт.js"></script> Что это нам даст? Ссылку на обсуждение можно, кстати? |
Цитата:
Если этого сделать нельзя, тогда вы не сможете получить его document |
Цитата:
Нет - не так - непосредственно на страницу, которую запрашиваем в объекте, т.е скрипт должен лежать внутри контента встраеваемой в object страницы, если нет, то доступ возможен только через собственный прокси |
А, тогда вообще никаких проблем, содержимым того документа, который внутри object, я руковожу как хочу
|
neon121,
Должно быть два скрипта по идее - т.е внутри объекта (Скрипт передатчик) И второй - скрипт приёмника - на текущей странице.. |
Deff,
Ок, допустим, удалось сделать оба. Содержимым обоих скриптов я руковожу в полной мере. А дальше что? Я ведь именно принцип не могу найти |
neon121,
Принцип примерно 1. Делаем IFRAME ( не object) посколь object требует отдельного тестирования не иследовался 2. Скриптом в IFRAME записываем Данные в window.name и переадресуем IFRAME на адрес текущей страницы родителя 3. Скрипт IFRAME с Родительским адресом считывает данные из window.name IFRAME и отдает их родителю 4. Затем этот же скрипт может снова перезаписать свои данные в window.name IFRAME и отдать эти данные, сменив адрес в IFRAME на исходный |
Deff,
для новых браузеров можно использовать postMessage а для старых да можно юзать window.name |
devote,
Лучше делать идентично - смысл в альтернативе ? после первичной загрузки - и click-klask по History - где за раз можно до 2-х мегов передать через window.name - смысла в альтернативах имхо -нет И можно реализовать связь не с одним кроссдоменом -а с 10 этим жа одним IFRAME |
Цитата:
|
devote,
А ограничение по объему есть ? Одна из востребованных задач - передача файлов |
Цитата:
|
Цитата:
|
Цитата:
А пользоваться postMessage совсем не сложно, на основной странице пишем: <iframe id="iframe" src="http://somesite.com/"></iframe> <script type="text/javascript"> var iframe = document.getElementById( 'iframe' ); iframe.onload = function() { // отправляем сообщение удаленному сайту загруженному в iframe iframe.contentWindow.postMessage( "test", "*" ); // отправим test } window.addEventListener( "message", function( event ) { // тут получаем сообщение от удаленного сайта alert( event.data ); }, false); </script>на удаленном сайте http://somesite.com/ пишем примерно туже байду: <script type="text/javascript"> window.addEventListener("message", function( event ) { event.source.postMessage( "Привет, ты мне отправил: " + event.data, event.origin ); }, false); </script>как видишь ничего сложного, это простой вариант |
Цитата:
:yes: Cижу в кроссдоменных запросах уже более полгода .. У нас сервис бесплатных форумов без доступа к движку, вдобавок и аякс был кривой до нового года, так что пришлось и так и эдак и еще как.. Делал и postMessage - много народу и с ИЕ и с кривыми браузами со всякими плагинами запрещающих обмен(Причём юзер об них не знает |
Как это провернуть с Iframe я знаю, но нужно именно с Object...
|
Цитата:
|
и да вы не поверите, но оно работает и с тегом object, я только что проверил.
просто заменил: <iframe id="iframe" src="http://somesite.com/"></iframe>на это: <object id="iframe" data="http://somesite.com/"></object>и все так же работает |
neon121,
так что юзайте postMessage и не парьтесь, единственное тока не будет это работать в ИЕ7 и ниже, остальные все поддерживают его. |
У меня это не заработало, тем не менее. Chrome считает, что у object нет параметра contentWindow
Проверял ПОСЛЕ загрузки обоих документов, если что |
neon121,
а свойство window.name - видит ? у object в Хроме ? *Ксать тоже интригует необходимость использования тега <object> |
Вот Firefox, например, с ним не согласен, конечно. Но проблемы это не отменяет. Есть какое-нибудь свойство у Chrome, заменяющее contentWindow?
|
Deff,
object.window.name , я правильно понял? Если да, то нет, не видит даже window у object |
Цитата:
<script> window.name="Test *" alert(window.name) </script> |
Deff,
Это работает, да |
neon121,
ну теперь осталось ток пробывать сменить адрес в object типо window.location='http://javascript.ru/forum/search.php?searchid=1128048'; |
Deff,
То есть, при каждом моменте, когда нужно из object обратиться к родителю, перегружать его содержимое? Это ж тогда сколько трафика уйдет Но, в любом случае, не подходит, потому что по условиям задачи документ в object не знает URL родителя |
neon121,
дык может все же откроете секрет того какова причина юзать именно тег OBJECT ? |
Цитата:
Цитата:
|
Цитата:
|
devote,
Требование заказчика Deff, Что ж, спасибо за разъяснение, завтра вероятно попробую протестировать такое решение |
Поясню. Требование заказчика связано с тем, что, по некоторым данным, object выгоднее для SEO, чем iframe
|
Цитата:
Странные СЕО'шники посылать таких надо, а проще вообще сказать что через object не возможно сделать того чего они хотят. Как говорится извините но не мы браузеры пишем под сайты а сайты пишут под браузеры. И сделать того чего браузер запрещает можно лишь костылями (либо вообще никак), которые никому не выгодно из-за нагрузки/багов/нестабильности. IFRAME роботами нормально индексируется, да конечно не одним махом, но со временем и он попадает в поисковый запрос. Но дело конечно ваше, вам мучатся с костылями. ИМХО |
Часовой пояс GMT +3, время: 15:04. |