Javascript 动态iframe内容返回源代码,而不是解析的代码

Javascript 动态iframe内容返回源代码,而不是解析的代码,javascript,jquery,html,iframe,Javascript,Jquery,Html,Iframe,第一个问题,如果格式不对,请纠正我 我需要从动态创建的iframe中检索两个动态元素的html,下面的代码返回“undefined”。但我可能错过了一些非常明显的东西 $("#frame0").contents().find(elementID).html(); 我正在将同一个域页面加载到iframe中,iframe中的两个元素是从其jquery创建的,其余是iframe中的静态内容。iframe将在单击按钮时创建并附加。页面中的iframe看起来和加载都很完美 以下是“我的按钮”中的相关代码

第一个问题,如果格式不对,请纠正我

我需要从动态创建的iframe中检索两个动态元素的html,下面的代码返回“undefined”。但我可能错过了一些非常明显的东西

$("#frame0").contents().find(elementID).html();
我正在将同一个域页面加载到iframe中,iframe中的两个元素是从其jquery创建的,其余是iframe中的静态内容。iframe将在单击按钮时创建并附加。页面中的iframe看起来和加载都很完美

以下是“我的按钮”中的相关代码:

$("#frameWrapper").append($('<iframe id="frame0" src="' + url + '"/>'));
$("#frame0").bind("load",function(){
    var html = $(this).contents().find('#content').html();
    var data = $(this).contents().find(elementID).html();
    var table = $(this).contents().find(elementID).parent().find("table").html();
    console.log(html);
    console.log(data);
    console.log(table);
});
$(“#frameWrapper”).append($('');
$(“#frame0”).bind(“加载”,函数(){
var html=$(this.contents().find('#content').html();
var data=$(this.contents().find(elementID.html());
var table=$(this.contents().find(elementID).parent().find(“table”).html();
log(html);
控制台日志(数据);
控制台日志(表);
});
#frameWrapper是当前页面中动态添加的容器

#frame0是实际的iframe

在上述代码中的三个console.log中,html始终返回与页面上iframe中实际视图不同的源代码,datatable始终未定义,它们是两个动态元素

如果我从上述代码中删除.html(),那么所有三个元素都会在console.log中找到并返回

我尝试了太多的东西来列出,尽可能多的答案在这里我可以找到,包括检查所有的建议,而我写这篇文章。但其中一些想法包括,使用普通javascript并添加超时以确保加载已完成,始终保持相同的响应

编辑:添加基本iframe代码:

<div id="content">
    <div class="wrap">
        <div id="elementID"></div>
        <table class="table"></table>
    </div>
</div>

#elementID在源中为空,仅在加载时通过jquery函数填充

EDIT2:显然,它在跨域策略方面存在问题,所以这不是一个很好的例子,但这是一个开始。

使用以下方法:

$("#frameWrapper").on("load", "#frame0", function () {
    var html = $(this).contents().find('#content').html();
    var data = $(this).contents().find(elementID).html();
    var table = $(this).contents().find(elementID).parent().find("table").html();
    console.log(html);
    console.log(data);
    console.log(table);
});
…而不是
$(“#frame0”).bind(“load”,function(){…

这称为委派事件,应该使用,因为iframe是动态生成的


我没有一个可用于测试您的问题的工作代码,因此我猜测上面的代码可以解决您的问题。

哇,快速回答,谢谢。我尝试过进行更改,包括将初始的#frameWrapper设置为静态元素,但load事件根本没有被调用,也没有console.logs输出。@ForeverNomad您可以创建一个示例代码吗关于你的问题?我可以更好地帮助你我开始编写一个JSFIDLE,但我不确定如何将同一个域iframe加载到其中,我认为这是很重要的一部分。@在Vernomad中,你可以加载任何公共网页并尝试从中获取特定元素。但是iframe应该是动态的。我已经在我的问题中添加了一个JSFIDLE,但是跨域在政策方面,这是一个我无法回避的问题,也不能直接说明问题所在。