web-dev-qa-db-fra.com

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

Le client avec qui je travaille a un jeu de cadres comme ça ...

<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 a lieu, j'ai besoin que mon cadre (cadre important qui est actuellement caché) prenne la plupart du temps la page et bloque toute interaction avec les autres cadres. Je prévois de bloquer l'interaction à l'aide du plugin d'interface utilisateur de bloc jquery.

Le problème est que je ne peux pas réellement changer les fichiers foo.html ou blah.html. Le code JS ne peut donc pas y vivre. Ce que je dois 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 l'exécuter dans le contexte des autres cadres. Comment puis je faire ça? J'espère que cela a du sens.

Merci CDR

39
ChrisDiRulli

Comme l'a 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, créez un raccourci:

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

Dans les versions de jQuery> = 1.7, nous ne pouvons pas obtenir les événements à l'ancienne

Versions plus anciennes (<1.7):

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

1.7 et plus récent:

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

Je ne suis pas certain du plugin de bloc, mais ne pouvez-vous pas saisir le cadre pertinent et le manipuler en utilisant l '"arborescence de cadres", quelque chose comme ceci: (à partir de 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();
0
Andrew M