2010-01-26 76 views
2

這似乎是一個常見問題,我看到的解決方案似乎並沒有爲我工作。動態iframe IE名稱問題

我們有一個動態生成和插入的iframe,並提交一個表單。在FF和IE8中工作正常,但在7我們得到的iframe名稱問題(IE不希望使用element.name或element.setAttribute(「name」,))設置iframe名稱。

所以我已經轉換我們的代碼到這一點:

 
function insertTrafRepiFrame(){ 
    var contDiv = document.getElementById('trafficReportDiv'); 
    if(contDiv != null){ 
     var iFrame; 
     try{ 
      iFrame = document.createElement('IFRAME'); 
     }catch(ex){ 
      iFrame = document.createElement('<iframe name="trafficreport">');           
     } 
     iFrame.name = "trafficreport"; 
     iFrame.id = "trafficreport"; 
     iFrame.style.border = 0; 
     iFrame.src = "http://www.frixo.com/widget/widget-report-area.aspx?road=all%38map=small%38latitude=51.1421%38longitude=-0.07545%38radius=50%38roadsearch=no%38roadlink=yes%38reporttype=full"; 
     while(contDiv.hasChildNodes()){ 
      contDiv.removeChild(contDiv.firstChild); 
     } 
     contDiv.appendChild(iFrame); 
    } 
} 

如果是這種形式:

 
<form name="traffic_report" id="traffic_report" target="trafficreport" action="http://www.frixo.com/widget/widget-report.aspx" onsubmit="javascript:return CheckResponse(this);" method="get"> 
    <div id="trafficRepFormInps"> 
     <input type="hidden" name="map" value="small" /> 
     <input type="hidden" name="roadsearch" value="no" /> 
     <input type="hidden" name="roadlink" value="yes" /> 
     <input type="hidden" name="reporttype" value="full" /><br /> 
     <label for="road">Type a road below, i.e. M23:</label><br />       
     <input name="road" value="M23" id="road" class="citysearchbox" type="text" />  
    </div> 
</form> 

我已經注意到的是,在開發工具,IE 7模式下顯示的iframe submitName的屬性,其中as 8模式顯示propdescName的屬性。這種差異是否會導致這種形式失誤?還是我錯過了別的東西?

感謝, 精神科

(PS有關IFRAME沒有呻吟了iframe的變量名請:P)

回答

4

我認爲你這樣做是正確與document.createElement('<iframe name="trafficreport">');

但我不知道它被稱爲document.createElement('IFRAME')就可以,即使在IE中也是如此。

我們正在使用動態iframe來交叉域JSONP調用沙箱,並且它在IE中正常工作。 我使用的代碼是:

var ifr = (/MSIE (6|7|8)/).test(navigator.userAgent) ? 
    document.createElement('<iframe name="'+id+'">'): 
    document.createElement('iframe'); 
    ifr.name = id; 

您可以檢查working example here點擊演示鏈接。如果演示工作正常,則表示代碼中有問題,如果它不起作用,那麼IE配置有問題。

+0

的的createElement(「IFRAME」)不是一個問題,因爲這是非IE位,它在FF採用該方法工作正常。 – Psytronic 2010-01-26 10:34:03

+0

對不起,我沒有得到什麼不工作。對我來說,代碼中的catch子句永遠不會被調用,即使在IE7中try子句也會成功。 我記得痛苦的時間讓上面的鏈接的例子在IE中工作,尤其是使用name屬性。可能是如果你把一個調試器(Visual Web Express可以遠程運行)。你會看到這些步驟,可能會有所不同。 – Mic 2010-01-26 11:10:10

+0

啊,對不起,是的。我誤解了你想說的話。我已經在try catch中轉換了兩條語句,現在進行測試。 – Psytronic 2010-01-26 11:21:37

3

這工作對我來說是改變名稱的元素已經被這樣注入到DOM後,唯一的解決辦法:

window.frames [名]。名稱=名稱;