动态Iframe IE名称问题

时间:2010-01-26 09:47:01

标签: javascript iframe

这似乎是一个常见的问题,而我所看到的解决方案似乎对我不起作用。

我们有一个动态生成并插入的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的属性,其中8模式显示了propdescName的属性。这种差异会导致这种形式失误吗?或者我错过了其他什么?

谢谢, PSY

(PS。关于iframe变量名称的iFrame没有呻吟请:p)

2 个答案:

答案 0 :(得分:4)

我认为你使用document.createElement('<iframe name="trafficreport">');

做得对

但是我不确定它是否被调用,因为即使在IE中,document.createElement('IFRAME')也可以。

我们使用动态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配置有问题。

答案 1 :(得分:3)

唯一对我有用的解决方案是在将元素注入DOM之后更改名称:

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