2010-01-26 3 views
2

Cela semble être un problème commun, et les solutions que j'ai vues ne semblent pas fonctionner pour moi.Dynamic Iframe IE Name Numéro

Nous avons un iframe généré et généré dynamiquement, avec un formulaire qui lui est soumis. Fonctionne bien dans FF et IE8, mais dans 7 nous obtenons le problème de nom iframe (IE ne veut pas définir le nom iframe en utilisant element.name ou element.setAttribute ("name",)).

J'ai converti notre code sur ceci:

 
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); 
    } 
} 

Avec cette forme:

 
<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> 

Ce que j'ai remarqué est que dans les outils de développement, le mode IE 7 montre l'iframe un attribut de submitName, où le mode 8 affiche un attribut de propdescName. Cette divergence pourrait-elle causer un mauvais fonctionnement de ce formulaire? Ou ai-je manqué quelque chose d'autre?

Merci, Psy

(PS iFrame se plaint de Pas plus iframe nom de la variable s'il vous plaît. P)

Répondre

4

Je pense que vous le faites correctement avec le document.createElement('<iframe name="trafficreport">');

Mais je ne suis pas sûr il est appelé comme le document.createElement('IFRAME') sera ok, même dans IE. Nous utilisons un iframe dynamique pour les appels JSONP inter-domaines de sandbox, et cela fonctionne très bien dans Internet Explorer. Le code que j'utilise est:

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

Vous pouvez vérifier un working example here cliquez sur le lien de démonstration. Si la démo fonctionne, cela signifie que quelque chose ne va pas dans votre code, si cela ne fonctionne pas, quelque chose ne va pas avec votre configuration IE.

+0

Le createElement ('IFRAME') n'est pas un problème, car il s'agit du bit non-ie, et il fonctionne très bien dans ff en utilisant cette méthode. – Psytronic

+0

Désolé je ne comprends pas ce qui ne fonctionne pas. Pour moi, la clause catch dans votre code ne sera jamais appelée car même dans IE7, la clause try sera couronnée de succès. Je me souviens d'un moment douloureux pour faire l'exemple du lien ci-dessus pour travailler dans IE, en particulier avec l'attribut name. Peut être si vous mettez un débogueur (Visual Web Express peut s'exécuter à distance). Et vous verrez les étapes et peut être repérer une différence. – Mic

+0

Ah, désolé, oui. J'ai mal compris ce que vous essayiez de dire. J'ai changé les deux déclarations dans le try catch, et tester maintenant. – Psytronic

3

La seule solution qui a fonctionné pour moi était en train de changer le nom après que l'élément a été injecté dans le DOM en faisant ceci:

window.frames [nom] .name = nom;