2009-09-07 5 views
1

J'utilise le xhtml strict sur mon site web, donc je n'ai pas l'élément "Iframe". Au lieu de cela, j'essaie d'utiliser l'étiquette d'objet.L'objet de script (comme iframe remplacement) dans IE fait des choses étranges

Je veux contenu dynamique ouvert, donc j'ai une fonction javascript comme ceci:

<object id="oPageName"> 

<script> 
    function openPage(pageName) { 
     var ifContent = document.getElementById("oPageName");    
     ifContent.data = pageName; 
    } 
</script> 

Si je passe dire « unDossier/SomePage.aspx » à la fonction openPage, il suffit simplement de définir le contenu page à "http://mysite/" - comme si elle coupait la partie restante de l'URL.

Il fonctionne très bien dans FF et Chrome, mais pas IE 8.

Des conseils sur ce comportement étrange?

Répondre

0

Si je passe dire « unDossier/SomePage.aspx » à la fonction openPage, il suffit simplement de définir la page de contenu à « http://mysite/ »

Vous faites mieux que la plupart, alors. Changer object.data dans IE8 ne fait rien pour moi, tout comme il a toujours dans IE.

Il existe une propriété 'object' non-standard sur < objet> s dans IE, qui vous donne l'objet document de la page HTML interne (comme vous pouvez l'attendre de la propriété contentDocument non prise en charge). Cependant, naviguer sur cette page (via object.object.URL ou object.object.parentWindow.location) revient à écrire sur object.data: nothing. (IE semble être confus, si vous regardez le object.object.location.href, il pointe vers l'URL parent même s'il s'agit du document enfant.)

Fondamentalement, il est bugué à l'enfer et vous êtes le meilleur Oublier < objet> pour l'intégration HTML aujourd'hui. Avalez votre fierté et incluez l'iframe, en utilisant la DTD de transition si vous voulez valider.

0

Dans les versions antérieures de IE (ne pas connaître IE8) certains attributs de certains types d'éléments sont immuables après avoir été définis une fois (par programme ou autrement). Je crois object et tous les éléments de forme (input, textarea etc.) se comportent de cette façon.

Je suis sûr qu'il ya une façon plus élégante de résoudre ce problème, mais vous pouvez essayer quelque chose comme ça (non testé):

function openPage(pageName) { 
    var ifContent = document.getElementById("oPageName"); 
    try { 
     ifContent.setAttribute('data', pageName); 
    catch (e) { // catch immutable attribute error 

     // create a new object and replace the old one 
     var o = document.createElement('object'); 
     o.setAttribute('name', pageName); 
     ifContent.parentNode.replaceChild(o, ifContent); 
    } 
} 

La plupart JS framworks ont leurs propres versions de setAttribute() qui travaillent autour de l'attribut IE gérer les bugs.

Questions connexes