2010-02-16 5 views
4

Je souhaite charger le contenu d'un iframe avec JavaScript. Je ne veux pas changer le src mais directement avec le contenu:Les scripts ne s'exécutent pas lors de la modification du contenu d'un iframe avec innerHTML

document.getElementById('frame').contentDocument.body.innerHTML = data; 

Il fonctionne, mais le JavaScript data n'a pas été exécuté. Est-ce une protection de sécurité ou j'ai oublié quelque chose?

+0

faire votre code est directement dans l'élément de corps? – xdevel2000

+0

quel code voulez-vous dire? – Charles

Répondre

3

Il semble que le problème ne soit pas l'iframe, mais le fait que les scripts ne sont pas exécutés lorsqu'ils sont insérés dans le texte DOM avec innerHTML.

Vous pouvez vérifier les points suivants Stack Overflow après pour un couple de solutions:

+0

Le problème est que j'obtiens une page HTML et que je ne peux pas la modifier. – Charles

+0

Votre meilleur pari est d'utiliser un framework JavaScript comme jQuery pour faire l'appel AJAX. Le 'jQuery.ajax()' est capable d'évaluer le code JavaScript très facilement. Vous voudrez peut-être vérifier le poste SO suivant pour plus d'informations: http://stackoverflow.com/questions/2203762/when-loading-an-html-page-via-ajax-will-script-tags-be-loaded –

0

Essayez cette

dans une page index.html écrire:

<script type="text/javascript"> 

    function init() 
    { 
     var s = document.createElement("script"); 

     s.innerHTML="alert('ops');"  

     document.getElementById("frame").contentDocument.getElementsByTagName("body")[0].appendChild(s); 
    } 

    window.onload = init; 
</script> 

...

<body> 
    <form id="form1"> 
    <div> 
    <iframe id="frame" src="test.html"></iframe> 
    </div> 
    </form> 
</body> 

Ensuite il suffit d'écrire test.html comme:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <title></title> 
</head> 
<body> 

</body> 
</html> 

et la charge d'un serveur Web index.html et le code fonctionne !!

+0

Le problème est que j'obtiens une page HTML complète d'ajax. Je vais obtenir une page HTML de html à/html avec javascript à l'intérieur .. – Charles

+0

Mais si vous obtenez une page Web complète, vous ne devriez pas l'insérer dans la balise body et vous devriez donc changer la propriété src de la balise frame. – xdevel2000

+0

Je fais un post avec ajax et obtient la page comme réponse. – Charles

0

Avoir quelque chose comme ce qui suit fonctionnerait.

<iframe id = "testframe" onload = populateIframe(this.id);></iframe> 

// The following function should be inside a script tag 

function populateIframe(id) { 

    var text = "This is a Test" 
var iframe = getObj(id); 

var doc; 

if(iframe.contentDocument) { 
    doc = iframe.contentDocument; 
} else { 
    doc = iframe.contentWindow.document; 
} 

doc.body.innerHTML = text; 

    } 
1

Utilisez ce pour obtenir le document crossbrowser

//returns iframe document 
function getIFrameDocument(iframe) { 
    var doc; 
    if (iframe.contentDocument) {//FF-Chrome 
     doc = iframe.contentDocument; 
    } else if (iframe.contentWindow) { 
     doc = iframe.contentWindow.document; 
    } else if (iframe.document) {//IE8 
     doc = iframe.document; 
    } else { 
     doc = window.frames[iframe.id].document; 
    } 

    return doc; 
} 
Questions connexes