Débogage des iframes avec les outils de développement Chrome

Je voudrais utiliser la console de développement Chrome pour regarder les variables et les éléments DOM dans mon application, mais l'application existe dans un iframe (puisque c'est une application OpenSocial).

Donc la situation est:

<containing site>
 <iframe id='foo' src='different domain'>
  ... my app ...
 </iframe>
</containing site>

Y a-t-il un moyen d'accéder aux choses qui se passent dans ce iframe à partir de la console de développement? Si j'essaie de faire document.getElementById("foo").something, ça ne fonctionne pas, probablement parce que le iframe est dans un domaine différent.

Je ne peux pas ouvrir le contenu iframe dans un nouvel onglet, car le iframe doit pouvoir parler au site contenant ainsi.

266
demandé sur Bemmu 2010-07-18 18:06:40

4 réponses

Dans les outils de développement de Chrome, il y a une barre en haut, appelée Execution Context Selector (h / t felipe-sabino), juste sous les éléments, le réseau, les Sources... onglets, qui change en fonction du contexte de l'onglet en cours. Lorsque, dans l'onglet Console il y a une liste déroulante dans la barre qui vous permet de sélectionner l'image contexte dans lequel la Console fonctionnera. Sélectionnez votre image dans cette liste déroulante et vous vous retrouverez dans le cadre de contexte. : D

Chrome v59 Chrome version 59

Chrome v33 Chrome version 33

Chrome v32 et inférieure de Chrome pré-version 32

495
répondu Metagrapher 2017-07-29 17:39:57

Actuellement, l'évaluation dans la console est effectuée dans le contexte du cadre principal de la page et elle adhère à la même politique d'origine croisée que le cadre principal lui-même. Cela signifie que vous ne pouvez pas accéder aux éléments de l'iframe sauf si le cadre principal le peut. Vous pouvez toujours définir des points d'arrêt et déboguer votre code à l'aide du panneau Scripts.

Mise à Jour: Ce n'est plus vrai. Voir la réponse de Metagrapher .

9
répondu Yury Semikhatsky 2017-05-23 12:18:01

Dans mon scénario assez complexe, la réponse acceptée pour savoir comment faire cela dans Chrome ne fonctionne pas pour moi. Vous pouvez essayer le débogueur Firefox à la place (partie des outils de développement Firefox), qui montre toutes les "Sources", y compris celles qui font partie d'un iFrame

2
répondu Izzy 2016-08-05 01:13:08

Lorsque l'iFrame pointe vers votre site comme ceci:

<html>
  <head>
    <script type="text/javascript" src="/jquery.js"></script>
  </head>
  <body>
    <iframe id="my_frame" src="/wherev"></iframe>
  </body>
</html>

Vous pouvez accéder à iFrame DOM via ce genre de chose.

var iframeBody = $(window.my_frame.document.getElementsByTagName("body")[0]);
iframeBody.append($("<h1/>").html("Hello world!"));
1
répondu Dave Aaron Smith 2011-09-20 16:24:21