使用jQuery在iframe中获取HTML
这是我的情况。
我有一个名为iframe.html
的文件,其中包含图像幻灯片的代码。 代码有点像
<html> <head> <!-- Have added title and js files (jquery, slideshow.js) etc. --> </head> <body> <!-- Contains the images which are rendered as slidehow. --> <!-- have hierarchy like 'div' inside 'div' etc. --> </body> </html>
用户可以使用embedded代码将幻灯片添加到他们的博客或网站(可以来自不同的域)。 假设用户必须在index.html
embedded幻灯片,可以添加以下几行来添加幻灯片:
<iframe id="iframe" src="path_to_iframe.html" width="480" height="320" scrolling="no" frameborder="0"></iframe>
这将从iframe.html
带来完整的HTML代码到index.html
,现在我需要一种方法来访问iframe中的元素来调整它们的一些属性。
就像在代码中一样,iframe的宽度和高度由用户设置为一些固定的尺寸。 我想调整幻灯片(和图像包含)的大小的iframe容器的大小。 什么是最好的方法来做到这一点?
我试图通过类似的东西从index.html
访问iframe组件,没有成功
$('#iframe').contents();
但得到的错误:
TypeError:不能调用null的方法'contents'
所以,我认为要在iframe.html
中实现幻灯片应检查父级的宽度和高度,并相应地设置其高度的逻辑。
我很困惑,希望我的问题对大多数人有意义。 请随时询问进一步的解释。 你的帮助表示赞赏。
这一行将检索框架的整个HTML代码。 通过使用其他方法而不是innerHTML
您可以遍历内部文档的DOM。
document.getElementById('iframe').contentWindow.document.body.innerHTML
需要记住的是,只有当帧源位于同一个域时,这才会起作用。 如果来自不同的域,跨站点脚本(XSS)保护将会启动。
试试这个代码:
$('#iframe').contents().find("html").html();
这将返回您的iframe中的所有HTML。 而不是.find("html")
你可以使用任何你想要的select器: .find('body')
.find('div#mydiv')
。
var iframe = document.getElementById('iframe'); $(iframe).contents().find("html").html();
$(editFrame).contents().find("html").html();
如果你在一个Iframe中有如下的Div
<iframe id="ifrmReportViewer" name="ifrmReportViewer" frameborder="0" width="980" <div id="EndLetterSequenceNoToShow" runat="server"> 11441551 </div> Or <form id="form1" runat="server"> <div style="clear: both; width: 998px; margin: 0 auto;" id="divInnerForm"> Some Text </div> </form> </iframe>
然后你可以使用下面的代码find那些Div的文本
var iContentBody = $("#ifrmReportViewer").contents().find("body"); var endLetterSequenceNo = iContentBody.find("#EndLetterSequenceNoToShow").text(); var divInnerFormText = iContentBody.find("#divInnerForm").text();
我希望这会帮助别人。
这对我工作,因为它在ie8中工作正常。
$('#iframe').contents().find("html").html();
但如果你喜欢使用JavaScript的jquery,你可以像这样使用
var iframe = document.getElementById('iframecontent'); var innerDoc = iframe.contentDocument || iframe.contentWindow.document; var val_1 = innerDoc.getElementById('value_1').value;
仅供参考。 这是如何使用JQuery(例如,当您无法通过元素ID进行查询时有用):
$('#iframe').get(0).contentWindow.document.body.innerHTML
这可以是另一个解决scheme,如果jQuery的加载iframe.html。
$('#iframe')[0].contentWindow.$("html").html()
为什么不尝试Ajax,请检查代码第1部分或第2部分(使用注释)。
$(document).ready(function(){ console.clear(); /* // PART 1 ERROR // Uncaught SecurityError: Failed to read the 'contentDocument' property from 'HTMLIFrameElement': Sandbox access violation: Blocked a frame at "http://stacksnippets.net" from accessing a frame at "null". Both frames are sandboxed and lack the "allow-same-origin" flag. console.log("PART 1:: "); console.log($('iframe#sandro').contents().find("html").html()); */ // PART 2 $.ajax({ url: $("iframe#sandro").attr("src"), type: 'GET', dataType: 'html' }).done(function(html) { console.log("PART 2:: "); console.log(html); }); });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> <html> <body> <iframe id="sandro" src="https://jsfiddle.net/robots.txt"></iframe> </body> </html>
$('#iframe').load(function() { var src = $('#iframe').contents().find("html").html(); alert(src); });