JavaScript: прослушиватель событий при изменении размера / высоты iFrame (поле комментария FB) - PullRequest
0 голосов
/ 31 октября 2011

У меня следующая проблема: мне нужно добавить прослушиватель событий для iframe (поле для комментариев Facebook), когда оно меняет свою высоту.

Я не могу получить доступ или изменить contentWindow, потому что это междоменный домен. Но должна быть функция обратного вызова или что-то, что изменяет атрибут height.

Есть ли способ добавить прослушиватель событий при изменении атрибутов или что-то в этом роде? Я уже попробовал onResize и onChange.

Я схожу с ума от этого ... У кого-нибудь есть идея?

Большое спасибо !!

1 Ответ

0 голосов
/ 14 декабря 2011

Краткий ответ: Нет.

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

...