Проблема с динамическим именем iframe в IE - PullRequest
2 голосов
/ 26 января 2010

Это, кажется, общая проблема, и решения, которые я видел, похоже, не работают для меня.

У нас есть динамически сгенерированный и вставленный iframe с формой, которая ему подчиняется. Отлично работает в FF и IE8, но в 7 мы получаем проблему с именем iframe (IE не хочет устанавливать имя iframe, используя element.name или element.setAttribute ("name",)).

Итак, я преобразовал наш код в это:

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 ]

4 голосов
/ 26 января 2010

Я думаю, что вы делаете это правильно с 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;

Вы можете проверить рабочий пример здесь нажмите на ссылку Demo. Если демонстрация работает, это означает, что что-то не так в вашем коде, если это не работает, что-то не так с вашей конфигурацией IE.

3 голосов
/ 10 ноября 2010

Единственное решение, которое работало для меня, это изменение имени после того, как элемент был внедрен в DOM, выполнив это:

window.frames [имя] .name = имя;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...