2011-12-01 35 views
1

我有一個父頁面,其中有一個iframe,也有javascript它將創建一個表單,將它附加到iframe,並在頁面加載時通過POST將其提交給外部URL。IE9不在ASP.NET應用程序中呈現iframe

來自外部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

請將您的代碼放在這裏,請... –

+0

https鏈接在IE下使用IFRAME卡住。你有他們嗎? –

+0

是的,「ExternalUrl」被評估爲HTTPS站點 –

回答

1

我只是想讓人們知道這裏的問題是,IE瀏覽器不喜歡iframe內容的窗口這樣的命名:

iframe[0].contentWindow.name = uniqueString 

相反,name屬性必須是內iframe標籤本身。沒有javascript錯誤指出這一點,它只是沒有一貫呈現。然後,當你需要動態引用iframe中的內容,使用方法:

var iframe = window.frames['embFrame'] 

這樣做,這樣解決了問題,現在的iframe中的內容一致地呈現。

相關問題