JavaScript: прослушиватель событий при изменении размера / высоты атрибута iFrame (поле комментариев FB)

#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 — это работает, но я уверен, что кто-то может написать это лучше, чем я? Также не слишком горжусь интервалом проверки высоты … могу обновить, если смогу.