从iframe元素访问jQuery数据

Mot*_*tie 9 iframe jquery

假设我在iframe中放置了同一个域的页面.在iframe中,我已经向元素添加了数据,如下所示:

HTML

<div id="data"></div>
Run Code Online (Sandbox Code Playgroud)

脚本

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

现在,一旦这个页面在iframe中,我知道我可以按如下方式访问该元素:

$('#frame').contents().find('#data');
Run Code Online (Sandbox Code Playgroud)

但是当我尝试从该元素获取数据时,它总是未定义的.

$('#frame').contents().find('#data').data('test1'); // shows up as undefined
Run Code Online (Sandbox Code Playgroud)

我知道jQuery存储data()在一个cache对象内部,但我不知道如何从该文档外部访问它.我设置了这个演示来显示我的问题.单击"获取帧数据"按钮以查看结果.

我会感激任何输入:)

Nic*_*ver 28

您需要从窗口的jQuery对象获取缓存元素,如下所示:

var windowjQuery = $('#frame')[0].contentWindow.$;
var f = $('#frame').contents().find('#data');
Run Code Online (Sandbox Code Playgroud)

然后获取数据,使用$.data(),如下所示:

windowjQuery.data(f[0], 'test1')
Run Code Online (Sandbox Code Playgroud)

您可以在此处测试您的更新/工作演示.


这真正访问的是:

var key = f[0][frame.contentWindow.$.expando];
var dataItem = frame.contentWindow.$.cache[key]["dataKey"];
Run Code Online (Sandbox Code Playgroud)