J'aimerais utiliser la console de développement Chrome pour examiner les variables et les éléments DOM de mon application, mais celle-ci existe dans un iframe
(puisqu'il s'agit d'une application OpenSocial).
Donc, la situation est la suivante:
<containing site>
<iframe id='foo' src='different domain'>
... my app ...
</iframe>
</containing site>
Existe-t-il un moyen d'accéder à ce qui se passe dans cette iframe
à partir de la console du développeur? Si j'essaie de faire document.getElementById("foo").something
, cela ne fonctionne pas, probablement parce que le iframe
se trouve dans un domaine différent.
Je ne peux pas ouvrir le contenu de iframe
dans un nouvel onglet, car le iframe
doit également pouvoir communiquer avec le site qui le contient.
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 onglets Éléments, Réseau, Sources ... , cela change en fonction du contexte de l'onglet en cours. Une fois dans l’onglet Console, une barre déroulante vous permet de sélectionner le contexte du cadre dans lequel la console fonctionnera. Sélectionnez votre cadre dans cette liste déroulante et vous vous retrouverez dans le contexte de cadre approprié. :RÉ
Chrome v59
Chrome v33
Chrome v32 & inférieur
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 stratégie cross-Origin que le cadre principal lui-même. Cela signifie que vous ne pouvez pas accéder aux éléments de l'iframe à moins que le cadre principal ne le puisse. Vous pouvez toujours définir des points d'arrêt et déboguer votre code à l'aide du panneau Scripts.
Mise à jour: Ceci n'est plus vrai. Voir réponse du métagraphe .
Dans mon scénario assez complexe, la réponse acceptée pour savoir comment procéder dans Chrome ne fonctionne pas pour moi. Vous pouvez également essayer le débogueur Firefox (faisant partie des outils de développement de Firefox), qui affiche toutes les "sources", y compris celles faisant partie d’un iFrame.
Lorsque l'iFrame pointe vers votre site, procédez comme suit:
<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 au DOM iFrame via ce genre de chose.
var iframeBody = $(window.my_frame.document.getElementsByTagName("body")[0]);
iframeBody.append($("<h1/>").html("Hello world!"));