Pourquoi l'ajout d'un <script> pour un créé dynamiquement <iframe> semblent exécuter le script dans la page parent?

Je suis d'essayer de créer un <iframe> à l'aide de JavaScript, puis ajouter un <script> élément qui <iframe>, ce qui je veux exécuter dans le contexte de la <iframe>d document.

Malheureusement, il semble que je suis en train de faire quelque chose de mal - mon JavaScript semble s'exécuter, mais le contexte de la <script> est le parent de la page, pas le <iframe>d document. J'ai aussi une 301 Erreur dans Firebug de l'onglet "Net" lorsque le navigateur demande iframe_test.js, mais il demande ensuite à nouveau (je ne sais pas pourquoi?) avec succès.

C'est le code que j'utilise (démo en live à http://onespot.wsj.com/static/iframe_test.html):

iframe_test.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>&lt;iframe&gt; test</title>
  </head>
  <body>
    <div id="bucket"></div>
    <script type="text/javascript" src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js"></script>
    <script type="text/javascript">
      $(document).ready(function() {
        $('#bucket').append('<iframe id="test"></iframe>');
        setTimeout(function() {
          var iframe_body = $('#test').contents().find('body');
          iframe_body.append('<scr' + 'ipt type="text/javascript" src="http://onespot.wsj.com/static/iframe_test.js"></scr' + 'ipt>');
        }, 100);
      });
    </script>
  </body>
</html>

iframe_test.js

$(function() {
  var test = '<p>Shouldn\'t this be inside the &lt;iframe&gt;?</p>';
  $('body').append(test);
});

Une chose qui semble inhabituel, c'est que le code dans iframe_test.js fonctionne même; je n'ai pas de chargement de jQuery dans le <iframe> lui-même, uniquement dans le document parent. Cela semble être une idée à moi, mais je ne peux pas comprendre ce que cela signifie.

Des idées, des suggestions, etc. serait bien apprécié!

  • Peut-être que cela a à voir avec le fait que le <script> élément lui-même est construit dans votre document parent. Avez-vous essayé d'ajouter un bloc de script de l'enfant: document qui, lorsqu'il est exécuté, définit son attribut "src" de la taille réelle du fichier que vous souhaitez charger?
  • Ce comportement est par la conception afin de prévenir le cross site scripting. Si vous pouviez insérer un script dans un autre site à la mode que vous tentez de vous pourrait injecter du script à partir de l'iframe contenant n'importe quel site web sans problème.
  • Bien, je pense que le même domaine" règles d'empêcher l'utilisation de tout contenu à tout pour le document dans l'iframe. Si le document est à partir du même domaine, cependant, les règles ne s'appliquent pas.
  • Merci beaucoup pour votre contribution. Votre idée semble comme il pourrait travailler - j'ai essayé mais je ne pouvais pas le faire fonctionner (mais cela ne veut pas dire qu'il n'est pas une solution valable). J'ai fini par aller avec le code dans ma réponse ci-dessous, qui est une solution plus élégante pour mes fins.
  • Fan - Merci pour les commentaires. Cependant, Pointu est correct car c' <iframe> est créé dans le même domaine que la page parent, chacun a accès aux autres DOM. Vous avez absolument raison sur un <iframe> qui vit dans un autre domaine que la page parent, si.
InformationsquelleAutor Bungle | 2009-10-19