2010-11-04 7 views
7

Disons que j'ai une page sur le même domaine que j'ai mis dans un iframe. Dans le iframe, j'ai ajouté des données à un élément, quelque chose comme ceci:Accéder aux données jQuery à partir de l'élément iframe

HTML

<div id="data"></div> 

Script

$('#data') 
    .data('test1', 'this is test data 1') 
    .data('test2', ['John', 'Smith']) 
    .data('test3', { 
     alert1: function() { 
      $('#data').append('test3: successful<br>'); 
     } 
    }) 

Maintenant, une fois que cette page est dans une iframe, je sais que je peux accéder à l'élément comme suit:

$('#frame').contents().find('#data'); 

Mais quand j'essaie d'obtenir les données de cet élément, il est toujours indéfini.

$('#frame').contents().find('#data').data('test1'); // shows up as undefined 

Je sais magasins jQuery data() interne dans un objet cache, mais je ne sais pas comment y accéder de l'extérieur de ce document. J'ai mis en place this demo pour afficher mon problème. Cliquez sur le bouton "Get Frame Data" pour voir les résultats.

Je vous serais reconnaissant toute entrée :)

Répondre

26

Vous devez obtenir l'élément de cache de que objet jQuery de la fenêtre, comme ceci:

var windowjQuery = $('#frame')[0].contentWindow.$; 
var f = $('#frame').contents().find('#data'); 

Ensuite, pour obtenir des données, utilisez $.data(), comme ceci:

windowjQuery.data(f[0], 'test1') 

You can test out your updated/working demo here.


Ce que cela est vraiment en train d'accéder:

var key = f[0][frame.contentWindow.$.expando]; 
var dataItem = frame.contentWindow.$.cache[key]["dataKey"]; 
+0

You Rock Nick! Merci! – Mottie

+0

@fudgey - bienvenue :) –

+0

cela m'a sauvé le cul. Merci. – Bnrdo

1

Je ne l'ai jamais essayé, mais je suis certain que vous avez besoin de parler à l'objet $ au lieu de votre document de l'un pour accéder au stockage de données interne de cet objet de l'iframe. Pas 100% sûr de savoir comment le faire - peut-être quelque chose comme

$('#frame').contents().jQuery.find("#data").data("test") 

(conjecture sauvage)

Qu'est-ce qui fonctionne pour vous est une fonction à l'intérieur du document iframe qui va chercher les données, et il revient à vous. Mais c'est beaucoup moins élégant que de le chercher directement, bien sûr.

+1

+1 pour être sur la bonne voie;) – Mottie

+0

Il n'y a pas objet '' sous jQuery' contenu() ', vous devrez obtenir en utilisant 'window.frames ['myFrame']. contentWindow.jQuery' –

Questions connexes