У меня есть родительская страница с 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>