IE9 не рендерит iframe в приложении ASP.NET - PullRequest
1 голос
/ 01 декабря 2011

У меня есть родительская страница с iframe, а также javascript, которая создаст форму, добавит ее в iframe и отправит через POST на внешний URL-адрес при загрузке страницы.

Содержимое внешнего URL-адреса затем загружается в iframe.Это прекрасно работает во всех браузерах, кроме IE9.Я попробовал трюк 'meta http-equiv="X-UA-Compatible" content="IE=8" ', и это не помогло.Иногда iframe отображает содержимое, иногда не обновляется.Операторы отладки в javascript показывают, что он запускается каждый раз (каждая загрузка страницы), а Fiddler показывает успешный запрос / ответ на внешний URL-адрес.Как будто IE9 выборочно решает, обновлять ли DOM.

Также я заметил, что если есть какая-либо задержка с внешним запросом (занимающая несколько секунд), то содержимое iframe никогда не рендерится.Кто-нибудь сталкивался с этим с IE9 и есть решение?

<iframe frameborder="0" height="600px" id="ifPage" runat="server" width="700px" />

<script type="text/javascript" language="javascript">
var alreadyrunflag = 0 //flag to indicate whether target function has already been run

if (document.addEventListener) {//FireFox or Sarafi
    document.addEventListener("DOMContentLoaded", function () { alreadyrunflag = 1; GetExternalPageContent() }, false)
}
else if (document.all && !window.opera) 
{//IE
    addLoadEvent(GetExternalPageContent)
}

function addLoadEvent(func) {
    var oldonload = window.onload;
    if (typeof window.onload != 'function') {
        window.onload = func;
    }
    else {
        window.onload = function () {
            if (oldonload) {
                oldonload();
            }
            func();
        }
    }
}

function GetExternalPageContent() {

    var iframe = document.getElementsByTagName("iframe");
    if (iframe != null) {
        var uniqueString = "embFrame";
        iframe[0].contentWindow.name = uniqueString;
        var form = document.createElement("form");
        form.target = uniqueString;
        form.action = '<%=ExternalUrl %>';
        form.method = "POST";

        //parameter submitted to external URL to get appropriate content  
        var input = document.createElement("input");
        input.type = "hidden";
        input.name = "embParam";
        input.value = "paramValue1";
        form.appendChild(input);

        document.body.appendChild(form);
        form.submit();
    }
}
</script>

1 Ответ

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

Я просто хотел, чтобы люди знали, что проблема в том, что IE не нравится именование окна содержимого iframe, например:

iframe[0].contentWindow.name = uniqueString

Вместо этого атрибут name должен находиться внутри самого тега iframe. Там не было никаких ошибок javascript, указывающих на это, он просто не отображался. Затем, когда вам нужно динамически ссылаться на содержимое iframe, используйте:

var iframe = window.frames['embFrame']

Решение этой проблемы решило проблему, и теперь содержимое iframe отображается последовательно.

...