2011-02-09 7 views
3

Я пытаюсь обмениваться данными jQuery с одной или несколькими страницами iframe'd html с их родительским html-документом. Что мне нужно - это взаимодействие между iframe и, если это возможно (очень желательно) для обмена/обмена .data(), то есть $ .cache обоих объектов jQuery (в родительском и дочернем iframe).Как передать данные jQuery .data() через iframe?

коснуться примерно так:

Родитель HTML:

<!DOCTYPE html> 
<html> 
    <head> 

     <title >iframe-data</title> 

     <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js" ></script> 


     <script type="text/javascript" > 

      jQuery(function($){ 
       var testData = 'hello world from #div1'; 
       $('#div1').data('test',testData); 
       var newTestData = $('.div2').closest('.div1').data('test'); 
       $('#div2').append('Parent window: "' + testData + '" === "' + newTestData + '" => ' + (testData === newTestData)); 
      }); // jQuery() 

     </script> 
    </head> 
    <body> 

     <div id="div1" class="div1" > 
      <div id="div2" class="div2" > 
      </div> 
      <iframe src="iframe-data2.html" ></iframe> 
     </div> 

    </body> 
</html> 

Iframe HTML:

<!DOCTYPE html> 
<html> 
    <head> 

     <title >iframe-data2</title> 

     <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js" ></script> 


     <script type="text/javascript" > 

      jQuery(function($){ 
       var testData = 'hello world from #div1'; 
       var $body = $(window.top.document.body); 
       var $div1 = $body.find('#div1'); 
       var outsideTestData = $body.find('#div1').data('test'); 
       var $div2 = $('#div2'); 
       $div2.append('outside test data: "' + testData + '" === "' + outsideTestData + '" => ' + (testData === outsideTestData)); 
      }); // jQuery() 

     </script> 
    </head> 
    <body style="background-color: silver"> 

     <div id="div1" class="div1" > 
      <div id="div2" class="div2" > 
      </div> 
     </div> 

    </body> 
</html> 
+0

В чем вопрос «Я принимаю это за то, что ваш код работает не так, как вы ожидаете, но что происходит вместо этого? Что вам нужно знать? –

+0

@ Исаак Это совсем не работает, но спасибо, я попытался прояснить вопрос. Надеюсь, это поможет. – Azder

+0

Просто интересно: Как родительская страница, так и страница iframe предоставляются через один и тот же домен или находятся в разных доменах? Если политики безопасности разных доменов могут быть/возникли проблемы. –

ответ

2

JQuery объект сам по себе создается внутри анонимной функции и использует закрытие для доступа к glob al (глобальный для других функций jQuery) внутри этих функций. Итак, в результате: jQuery в iframe и jQuery в верхнем окне имеют разные массивы данных. Если вам нужны данные верхнего уровня, используйте window.top.jQuery('#div1').data('test1') (обратите внимание, что контекст jQuery по умолчанию является документом, в котором он был первоначально создан, поэтому, используя «верхний уровень jQuery», нам не нужно указывать документ верхнего уровня.

Смежные вопросы