Междоменный и iFrames

Я пытаюсь сделать то, чего действительно не могу понять. У меня есть iFrame, загружающий некоторый контент из другого домена, к которому у меня нет питания. Я «просто» пытаюсь получить содержимое iFrame, чтобы использовать его в PHP / Javascript. Здесь я столкнулся с проблемой "междоменного". Я не могу получить доступ к содержимому iFrame. Так обидно.

Итак, я читал, читал еще и видел о функции postMessage (), предоставляемой HTML5. Я видел решение этой системы, но до сих пор не могу понять одну точку. В основном он работает с отправителем и слушателем. Поэтому мне нужно иметь слушателя в iframe, который при запуске отправит контент обратно в главное окно.

Но КАК добавить код в уже загруженный iFrame без удаления содержимого?

Мне действительно не нужно использовать postMessage (), я могу быть кем угодно, пока я могу получать этот чертов контент!

Любое предложение приветствуется!

Спасибо !


person Ben    schedule 07.12.2011    source источник
comment
Почему бы просто не пропустить iFrame и использовать функцию PHP file_get_contents()?   -  person Aaron    schedule 07.12.2011
comment
Потому что мне нужно использовать IP клиента. Не могу без ... Вот тут и начались все мои проблемы :)   -  person Ben    schedule 07.12.2011


Ответы (2)


Это все еще невозможно и не зря!

Для чтения из другого домена с использованием клиентских файлов cookie, IP-адреса и учетных данных требуется, чтобы просматриваемая страница каким-то образом раскрывала информацию - это двусторонний диалог, при котором прослушиватель (внешняя страница) и отправитель (IFrame) работают вместе.

Причина, по которой это требуется: представьте, что вы создаете IFrame, который занимает 100% страницы. Вы можете показать обычную форму входа на веб-сайт в IFrame и, тем не менее, перехватить нажатия клавиш / изменения поля ввода и зарегистрировать их. Пользователь узнает разницу, только если проверит URL-адрес.

Если у вас есть контроль над браузером пользователя, вы можете использовать междоменный AJAX GreaseMonkey для получения содержимого IFrame (при условии Firefox / Chrome)

person Basic    schedule 08.12.2011

Не поможет что-то вроде этого:

function getContentFromIframe(iFrameName)
{

    var myIFrame = document.getElementById(iFrameName);
    var content = myIFrame.contentWindow.document.body.innerHTML;

    //Do whatever you need with the content    

}


person Sudhir Bastakoti    schedule 07.12.2011
comment
В моем случае это не сработает, потому что содержимое iFrame: 1) XML, а не HTML 2) Из другого домена, поэтому я не думаю, что мне разрешен доступ к нему таким образом. - person Ben; 07.12.2011
comment
IFrame загружает контент из другого домена. Политика Same-Origin запрещает доступ к содержанию во фреймах из другого домена, даже если только для его чтения. - person Aaron; 07.12.2011
comment
Да, пропустил это, пожалуйста, взгляните на это: stackoverflow .com / questions / 6474484 /. - person Sudhir Bastakoti; 07.12.2011
comment
@Aaron нет возможности обойти это с помощью HTML5? Каким-то образом это должно быть возможно ... Нет? - person Ben; 07.12.2011
comment
@Sudhir Хорошо, пост, в котором вы предложили, указывает, что вам нужен доступ с обеих сторон, что невозможно в моем случае. - person Ben; 07.12.2011
comment
@BenCoriou Итак, если я правильно вас понял, вы пытаетесь загрузить чужой контент из другого домена в iFrame и взаимодействовать с его содержимым. Вкратце: это невозможно. Это диктуется политикой одинакового происхождения. Даже если вы решили использовать обмен сообщениями с фрагментами или postMessage для связи с фреймом, вам нужно будет разместить сценарий на другой странице, который анализирует фрагменты из строки запроса или получает сообщение из родительского окна. - person Aaron; 08.12.2011
comment
@aaron Да, это то, чем я хочу заниматься. Мне просто нужно использовать IP клиента вместо серверов. Я действительно разочарован, что это невозможно сделать ... - person Ben; 08.12.2011
comment
И, чтобы нам было понятно, когда вы говорите «клиент», вы имеете в виду компьютер, который обращается к вашему сайту в веб-браузере, верно? - person Aaron; 08.12.2011
comment
Да, это то, что я имею в виду, Аарон. Мне нужен браузер пользователя, чтобы получить контент, с сервера это бесполезно. - person Ben; 08.12.2011