Ответ 1
Страница внутри iframe:
<script>
document.domain = document.domain;
</script>
Это выглядит глупо, но это работает. См. "Что делает document.domain = document.domain?".
У меня есть iframe, созданный на странице, и домен страницы явно установлен на "xyz.com", но домен iframe по умолчанию имеет значение "dev.xyz.com", который является фактическим доменом i'm развивающийся для.
Проблема в том, что когда я пытаюсь получить доступ к этому iframe через iframe.contentWindow.document, он терпит неудачу из-за разницы в домене.
Я попытался установить iframe src в файл с document.domain = 'xyz.com', но это, похоже, не делает трюк...
Любые идеи?
Страница внутри iframe:
<script>
document.domain = document.domain;
</script>
Это выглядит глупо, но это работает. См. "Что делает document.domain = document.domain?".
После некоторых исследований я нашел этот jQuery plugin, который делает postMessage обратно совместимым со старыми браузерами, используя различные трюки.
Вот краткий пример, показывающий, как отправить высоту тела iframe в родительское окно:
На главной странице (родительской):
// executes when a message is received from the iframe, to adjust
// the iframe height
$.receiveMessage(
function( event ){
$( 'my_iframe' ).css({
height: event.data
});
});
// Please note this function could also verify event.origin and other security-related checks.
На странице iframe:
$(function(){
// Sends a message to the parent window to tell it the height of the
// iframe body
var target = parent.postMessage ? parent : (parent.document.postMessage ? parent.document : undefined);
$.postMessage(
$('body').outerHeight( true ) + 'px',
'*',
target
);
});
Я тестировал это на Chrome 13+, Firefox 3.6+, IE7, 8 и 9 на XP и W7, сафари на OSX и W7.;)
В дополнение к ссылке на Бен Альман plug in Я думал, что опубликую этот рабочий пример. Он] rRelies на iframe, который имеет исходную страницу, содержащую проверку подлинности jquery и запрос данных script, который затем передает результат в родительское окно {other domain} с помощью плагина сообщений.
Плагин сообщений NB будет нарушен, если использовать JQ v9, поскольку JQV9 не использует "браузер", указанный в плагине
1-й шаг: Добавьте код плагина в отправляющие и принимающие документы:
http://benalman.com/projects/jquery-postmessage-plugin/
Второй шаг: Добавьте это в отправляющий документ:
$.postMessage(
$(X).html(),
'http://DOMAIN [PORT]/FOLDER/SUBFOLDER/RECIEVINGDOCNAME.XXX'
) ;
Где X может быть локальным var, содержащим предварительно отформатированный json-массив или другой материал, а http-url здесь - адрес принимающего документа.
Третий шаг: Добавьте это к получающему документу:
$.receiveMessage(
function(event){
alert("event.data: "+event.data);
$("#testresults").append('<h1>'+event.data+'<h1>');
},
'http://DOMAIN.COM OR SOMETHING'
);
Где URL-адрес http является DOMAIN отправляющего документа. Хорошо в IE 8, 9, FF16, сафари Windows (Windows wait x V9 еще не проверена), сафари x mac вещь.
Результатом является любой элемент, который вы хотите удалить из другой страницы домена (с которой у вас есть доступ..).