如何使用jQuery访问iframe的内容?

129

如何使用jQuery访问iframe的内容?我尝试过以下代码,但没有成功:

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

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

我该如何访问myContent


类似于 jquery/javascript: accessing contents of an iframe 但是已接受的答案不符合我的要求。


我刚刚发现Firefox控制台中的内置$变量根本不像完整的jQuery。(在意识到我也没有jQuery变量后,我意识到这一点,然后发现我没有加载jQuery的源代码)。 - eel ghEEz
3个回答

242

3
给我出错了:错误:没有权限访问'ownerDocument'属性。 - Imran Khan
28
可能是由于以下原因导致出现错误:1)Iframe 不属于同一域。2)您正在尝试在 Iframe 加载事件之前读取它。 - iMatoria
1
有没有一种方法可以在尝试访问 iframe 内容并出现错误之前验证它是否来自同一域? - Kamafeather
3
源URL已损坏。 - karthzDIGI
1
@jperezmartin:你需要使用一些JavaScript库来在主页面和iframe之间传递信息。基本上,由于跨浏览器功能,它被浏览器拒绝了。很抱歉,我不知道有这样的库,因为我从未需要过它。 - iMatoria
显示剩余4条评论

24
<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>

17

如果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');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接