Я использую iframe, который использует технологию ajax.и он не меняет высоту во время полета - PullRequest
0 голосов
/ 23 декабря 2011

Я использую iframe на своем веб-сайте, для которого я использую doIframe () , чтобы изменить высоту, она отлично работает при загрузке страницы, но мой iframe использует технику ajax.Когда она загружает некоторые новые данные, эта функция не изменяет размер окна, а содержимое в конце iframe не отображается.

Я хочу, чтобы вы обновили эту функцию (или предложили новую функцию), которая изменяет размеры iframe и монитораэто пока кадр работает.

Я пробовал много других функций jquery, но для того, чтобы у меня не работало, помогите * Я пробовал событие «изменить» вместо события «загрузка», но не получилось *

(function() {
    function doIframe() {
        o = document.getElementsByTagName('iframe');
        for (i = 0; i < o.length; i++) {
            if (/\bautoHeight\b/.test(o[i].className)) {
                setHeight(o[i]);
                addEvent(o[i], 'load', doIframe);
            }
        }
    }

    function setHeight(e) {
        if (e.contentDocument) {
            e.height = e.contentDocument.body.offsetHeight + 35;
        } else {
            e.height = e.contentWindow.document.body.scrollHeight;
        }
    }

    function addEvent(obj, evType, fn) {
        if (obj.addEventListener) {
            obj.addEventListener(evType, fn, false);
            return true;
        } else if (obj.attachEvent) {
            var r = obj.attachEvent("on" + evType, fn);
            return r;
        } else {
            return false;
        }
    }
    if (document.getElementById && document.createTextNode) {
        addEvent(window, 'load', doIframe);
    }
});

Ответы [ 2 ]

1 голос
/ 24 декабря 2011

Допустим, у вас есть три страницы:

  • mainPage.html , который содержит iframe.
  • framedPage.html , который отображается в iframe атрибутом src iframe.
  • loadMe.html , который будет загружен в страницу framedPage.html функцией $ .load ().

В файле loadMe.html, который вы загружаете с помощью ajax, вы можете написать код jQuery в разделе заголовка страницы для вызова функции изменения размера при загрузке документа:

<script language="javascript" type="text/javascript">
    $(document).ready(function () {
        parent.setHeight();
    });
</script>

В mainPage.html, который содержит iframe, вы можете написать функцию javascript в заголовке страницы для изменения размера iframe:

function setHeight(cerceveIci) {
    //find the height of the internal page
    var the_height = cerceveIci.scrollHeight;

    //change the height of the iframe
    document.getElementById("your_iframe_id").height = the_height;
}

Итак, когда loadMe.html успешно загружен в framedPage.html, вызывается функция setHeight () mainPage.html и изменяется размер iframe.

Что касается загрузки чего-либо в framedPage.html, вы можете добавить некоторую функцию jQuery в заголовок framedPage.html:

function loadWithAjax() {
    $("#myDiv").load("loadMe.html");
});

и позвоните по ссылке <a onclick="loadWithAjax();">Load with Ajax.</a>.

1 голос
/ 24 декабря 2011

На родительской странице вы можете добавить прослушиватель событий к содержимому iframe, который будет прослушивать любой щелчок в теле содержимого внутри iframe. Например, запуск этой функции один раз может с этим справиться.

function boyutAyarlayici() {
    var cerceveIci = document.getElementById("your_iframe_id")
                             .contentWindow.document.body;
    setHeight(cerceveIci);
    if (cerceveIci.addEventListener) { //if not IE
        cerceveIci.addEventListener('click', function () {
            setHeight(cerceveIci);
        }, false);
    }
    else if (cerceveIci.attachEvent) { //if IE
        cerceveIci.attachEvent('onclick', function () {
            setHeight(cerceveIci);
        });
    }
}

где моя функция setHeight выглядит так:

function setHeight(cerceveIci) {
    //find the height of the internal page
    var the_height = cerceveIci.scrollHeight;

    //change the height of the iframe
    document.getElementById("your_iframe_id").height = the_height;
}

Затем, если вы щелкнете что-нибудь в iframe, размер iframe будет изменен в соответствии с содержимым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...