39 votes

Exécuter JQuery dans le contexte d'un autre cadre

Le client que je suis en train de travailler avec un jeu de cadres comme si...

<frameset rows="100,*, 0">
  <frame name="theFrame" id="theFrame" src="blah.html" >
  <frame name="theSecondFrame" id="theSecondFrame" src="foo.html" >
  <frame name="importantFrame" id="importantFrame" src="myFrame.html" >
</frameset>

Quand une certaine action prend place j'ai besoin de mon cadre (importantframe qui est actuellement caché) la plupart du temps de prendre plus de la page et de bloquer toute interaction avec les autres images. Je suis à la planification sur le blocage de l'interaction à l'aide de jquery bloc UI plugin.

Le problème est que je ne pouvez pas modifier le foo.html ou blah.html les fichiers. Ainsi, le code JS ne peuvent pas y vivre. Ce dont j'ai besoin pour faire est d'exécuter mon code jquery dans le contexte de ces cadres. Donc, pour récapituler, j'ai besoin de mon code JQuery pour vivre dans myFrame.html mais s'exécute dans le contexte de toutes les autres images. Comment puis-je le faire? L'espoir qui fait sens.

Merci CDR

81voto

pjb3 Points 3548

L' jQuery de la fonction, il est plus communément appeler avec $, prend un deuxième argument de contexte, qui est "ce qui DOM l'élément de l'objet jQuery dois-je faire la recherche". La plupart du temps, vous omettez cet argument, de sorte que le contexte par défaut pour le document HTML en cours. Lorsque votre code est exécuté dans l'iframe, les valeurs par défaut du document pour que l'iframe document. Mais vous pouvez saisir facilement le document à l'une des autres images.

Par exemple, mettez-le en myFrame.html, et cela permettra d'éliminer tous les éléments h1 à partir de l'image avec blah.html en elle. Remarquez le second argument $, ce qui est l'expression qui saisit le bla croisée de l'intérieur important cadre:

<html>
  <head>
    <script type="text/javascript" src="/javascripts/jquery.js"></script>
    <script type="text/javascript">
      function doIt() {
        $('h1', window.parent.frames[0].document).remove()
      }
    </script>
  </head>
  <body>
    <h1>My Frame</h1>
    <a href="#" onclick="doIt()">Do It</a>
  </body>
</html>

4voto

Patrick Fisher Points 3979

Comme dit pjb3, définissez le contexte jQuery. Si vous avez des cadres imbriqués, votre code ressemblera à ceci:

 $('*',window.parent.frames[0].frames[0].document).size();
 

Ou, mieux encore, faites un raccourci:

 targetFrame = window.parent.frames[0].frames[0].document;
$('*',targetFrame).size();
 

0voto

Andrew M Points 3067

Je ne suis pas certain du plug-in de blocage, mais vous ne pouvez pas vous procurer le cadre pertinent et le manipuler à l'aide de "l'arborescence du cadre", comme ceci: (dans importantFrame.htm)

 parent.theFrame.someProperty = someValue;
 

par exemple:

 parent.theFrame.location.href='anotherPage.html';
 

D'après ce que j'ai lu, vous pourriez avoir besoin de Jquery sur la page cible, mais vous pouvez essayer quelque chose comme:

 parent.theFrame.block();
 

ou peut-être:

 $('#theFrame').block();
 

0voto

aliaksej Points 151

Dans les versions de jQuery> = 1.7, nous ne pouvons pas obtenir les événements de manière ancienne

Anciennes versions (<1.7):

 var events = $('#form').data('events');
 

1.7 et plus récent:

 var events = $.fn.data($('#form'), 'events');
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X