#facebook #iframe #facebook-javascript-sdk
#Facebook #iframe #facebook-javascript-sdk
Вопрос:
У меня следующая проблема: мне нужно добавить прослушиватель событий для iframe
(поля комментариев Facebook), когда оно меняет свою высоту.
Я не могу получить доступ или изменить contentWindow
, потому что это междоменный. Но должна быть функция обратного вызова или что-то, что изменяет height
атрибут.
Есть ли способ добавить прослушиватель событий при изменении атрибута или что-то в этом роде? Я уже пробовал OnResize и onChange.
Я схожу с ума от этого… У кого-нибудь есть идея?
Большое вам спасибо!!
Ответ №1:
Короткий ответ: Нет.
Однако вы можете использовать «postMessage» и «ReceiveMessage» для отправки из одного iframe в другой междоменный. (Конечно, только если у вас есть доступ к содержимому iframed — я подозреваю, что не так, как на facebook.)
В любом случае … для будущей помощи….
(на странице с iframed)
var ii = {}
ii.window_height = 800;
var sendHeight = function () {
var window_height = $('body').outerHeight(true);
if (window_height != ii.window_height) {
ii.window_height = window_height;
window.parent.postMessage(ii.window_height, "http://containerDomain.com");
}
}
setInterval(sendHeight, 2000);
(на странице контейнера)
function receiveMessage(evt) {
if (evt.origin === 'https://iframedDomain.com')
{
var iframe_content_height = evt.data;
$('#iframe_form').animate({height: iframe_content_height });
}
}
if ($.browser.msie) {
window.attachEvent('onmessage', receiveMessage);
} else {
window.addEventListener('message', receiveMessage, false);
}
Не забудьте изменить домены в каждом скрипте.
Примечание: это использует jQuery — это работает, но я уверен, что кто-то может написать это лучше, чем я? Также не слишком горжусь интервалом проверки высоты … могу обновить, если смогу.