Доступ к данным jQuery из элемента iframe - PullRequest
8 голосов
/ 05 ноября 2010

Допустим, у меня есть страница в том же домене , которую я поместил в iframe. В iframe я добавил данные в элемент, что-то вроде этого:

HTML

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

Сценарий

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

Теперь, когда эта страница находится в iframe, я знаю, что могу получить доступ к элементу следующим образом:

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

Но когда я пытаюсь получить данные из этого элемента, они всегда не определены.

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

Я знаю, что jQuery хранит data() внутри объекта cache, но я не знаю, как получить к нему доступ извне этого документа. Я настроил эту демонстрацию , чтобы отобразить мою проблему. Нажмите кнопку «Получить данные кадра», чтобы увидеть результаты.

Буду признателен за любую информацию:)

Ответы [ 2 ]

27 голосов
/ 05 ноября 2010

Вам нужно получить элемент кэша из этого объекта jQuery окна, например:

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

Затем, чтобы получить данные, используйте $.data(), например:

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

Вы можете проверить обновленную / рабочую демонстрацию здесь .


То, к чему это действительно получается, это:

var key = f[0][frame.contentWindow.$.expando];
var dataItem = frame.contentWindow.$.cache[key]["dataKey"];
1 голос
/ 05 ноября 2010

Я никогда не пробовал этого, но я уверен, что вам нужно поговорить с объектом iframe $ вместо объекта вашего документа, чтобы получить доступ к внутреннему хранилищу данных этого объекта.Не уверен на 100%, как это сделать - возможно, что-то вроде

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

(дикая догадка)

Наверняка будет работать функция внутри документа iframe, которая извлекает данные и возвращаетэто для вас.Но это, конечно, не так элегантно, как получить его напрямую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...