2009-11-25 45 views
85

如何使用jQuery访问iframe的内容?我试着这样做,但它不会工作:如何使用jQuery访问iframe的内容?

iframe中的内容:<div id="myContent"></div>

的jQuery:$("#myiframe").find("#myContent")

如何我可以访问myContent


Similar tojquery/javascript: accessing contents of an iframe but the accepted answer is not what I was looking for.

+0

我刚刚发现Firefox控制台中的内置$变量看起来不像完整的jQuery。 (我意识到我没有jQuery变量,然后发现我没有加载jQuery的源代码)。 –

回答

160

您必须使用contents()方法:

$("#myiframe").contents().find("#myContent") 

来源:http://simple.procoding.net/2008/03/21/how-to-access-iframe-in-jquery/

+3

给我错误:错误:权限被拒绝访问属性'ownerDocument' –

+22

ime:它可能会给你错误,因为以下原因:1)iframe不属于同一个域。 2)您正在尝试在Iframe加载事件之前阅读它。 – iMatoria

+0

有没有办法在尝试访问它并获取错误之前验证iframe内容是否来自同一个域? – Kamafeather

15
<html> 
<head> 
<title></title> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js"></script> 
<script type="text/javascript"> 

$(function() { 

    //here you have the control over the body of the iframe document 
    var iBody = $("#iView").contents().find("body"); 

    //here you have the control over any element (#myContent) 
    var myContent = iBody.find("#myContent"); 

}); 

</script> 
</head> 
<body> 
    <iframe src="mifile.html" id="iView" style="width:200px;height:70px;border:dotted 1px red" frameborder="0"></iframe> 
</body> 
</html> 
12

如果iframe的来源是外部域,浏览器将隐藏的iframe内容(同源政策)。 一种解决方法是节省外部内容在文件中,例如(在PHP):

<?php 
    $contents = file_get_contents($external_url); 
    $res = file_put_contents($filename, $contents); 
?> 

然后,获取新的文件内容(串),并解析它为HTML,例如(jQuery中):

$.get(file_url, function(string){ 
    var html = $.parseHTML(string); 
    var contents = $(html).contents(); 
},'html');