2012-02-22 3 views
29

У меня есть сайт под названием example.com, на котором iframe встроен в домен iframe.net, теперь я хочу прочитать содержимое iframe и передать некоторый параметр для отображения текстового сообщения. Как Привет с именем пользователя.Перекрестный домен iframe issue

Теперь проблема заключается в этом состоянии не в состоянии сделать связь между этими двумя, даже я не в состоянии получить innerHTML из IFRAME я использовал следующий подход

document.getElementById('myframe').contentWindow.document.body.innerHTML; 

Он бросает ошибку «Отказано в доступе для доступа к собственности»

ли кто-нибудь знает, как читать и писать кросс-платформенного домен

+0

Вы можете использовать easyxdm библиотеку для связи между поперечинами доменами. Вот ссылка, пожалуйста, оформление заказа. Я использовал эту технику для изменения размера iframe (ширина, высота) в кросс-доменах. Я не уверен, работает ли эта библиотека с вашим сценарием. Попробуйте. http://easyxdm.net/wp/ –

ответ

37

Если вы не имеете контроля над обрамленным сайтом, вы не можете обойти политику междоменной.

Если у вас есть контроль над обоими сайтами, вы можете использовать метод postMessage для передачи данных по различным доменам. Очень простой пример:

// framed.htm: 
window.onmessage = function(event) { 
    event.source.postMessage(document.body.innerHTML, event.origin); 
}; 

// Main page: 
window.onmessage = function(event) { 
    alert(event.data); 
}; 

// Trigger: 
// <iframe id="myframe" src="framed.htm"></iframe> 
document.getElementById('myframe').contentWindow.postMessage('','*'); 
+1

Есть ли какие-либо обратные прокси-серверы для перекрестного домена, чтобы это произошло –

+1

@KunalVashist Зависит от вашего приложения (требуется более подробная информация). Также рассмотрите этот вопрос [Способы обхода политики одного и того же происхождения] (http://stackoverflow.com/questions/3076414/ways-to-circumvent-the-same-origin-policy). –

+0

Thx @rob это хорошо, но в конечном итоге у меня нет доступа к содержимому фрейма –

2

В Internet Explorer 8 события, переданного в качестве параметра может быть нулевым, поэтому вам необходимо получить доступ событие различным образом:

В кадре .html:

window.onmessage = function(event) { 
    var evt = evt || window.event; 
    evt.source.postMessage('Message from iFrame', evt.origin); 
}; 

На main.html:

window.onmessage = function(event) { 
    var evt = evt || window.event; 
    alert(evt.data); 
}; 

Событие запускается точно так же, как представил Rob W:

document.getElementById('frameId').contentWindow.postMessage('message','*'); 
Смежные вопросы