我正在尝试获取iframe的文档对象,但我用google搜索的示例似乎都没有帮助。我的代码如下所示:
<html>
<head>
<script>
function myFunc(){
alert("I'm getting this far");
var doc=document.getElementById("frame").document;
alert("document is undefined: "+doc);
}
</script>
</head>
<body>
<iframe src="http://www.google.com/ncr" id="frame" width="100%" height="100%" onload="myFync()"></iframe>
</body>
</html>
我已经测试过我能够获取iframe对象,但是.document不起作用,.contentDocument和我认为我也测试过其他一些选项,但是所有这些选项都返回undefined,甚至是本来应该有用,但他们不适合我。所以我已经有了iframe对象,现在我想要的只是它的文档对象。我在Firefox和Chrome上测试过这一点无济于事。
答案 0 :(得分:66)
尝试以下
var doc=document.getElementById("frame").contentDocument;
// Earlier versions of IE or IE8+ where !DOCTYPE is not specified
var doc=document.getElementById("frame").contentWindow.document;
注意:AndyE指出所有主流浏览器都支持contentWindow
,所以这可能是最好的方法。
注意2:在此示例中,您将无法通过任何方式访问该文档。原因是您无法访问具有不同来源的iframe文档,因为它违反了“同源”安全策略
答案 1 :(得分:6)
这是我使用的代码:
var ifrm = document.getElementById('myFrame');
ifrm = (ifrm.contentWindow) ? ifrm.contentWindow : (ifrm.contentDocument.document) ? ifrm.contentDocument.document : ifrm.contentDocument;
ifrm.document.open();
ifrm.document.write('Hello World!');
ifrm.document.close();
contentWindow与contentDocument
- IE(Win)和Mozilla(1.7)将返回内部的窗口对象 iframe与oIFrame.contentWindow。
- Safari(1.2.4)不了解该属性,但确实有 oIframe.contentDocument,指向里面的文档对象 iframe。
- 为了使它变得更加复杂,Opera 7使用了 oIframe.contentDocument,但它指向的是window对象 iframe中。因为Safari无法直接访问窗口对象 通过标准DOM(或者是吗?)的iframe元素,我们完全 现代跨浏览器兼容的代码只能访问 iframe中的文档。
答案 2 :(得分:6)
更强大:
function getIframeWindow(iframe_object) {
var doc;
if (iframe_object.contentWindow) {
return iframe_object.contentWindow;
}
if (iframe_object.window) {
return iframe_object.window;
}
if (!doc && iframe_object.contentDocument) {
doc = iframe_object.contentDocument;
}
if (!doc && iframe_object.document) {
doc = iframe_object.document;
}
if (doc && doc.defaultView) {
return doc.defaultView;
}
if (doc && doc.parentWindow) {
return doc.parentWindow;
}
return undefined;
}
和
...
var el = document.getElementById('targetFrame');
var frame_win = getIframeWindow(el);
if (frame_win) {
frame_win.targetFunction();
...
}
...
答案 3 :(得分:0)
就我而言,这是由于Same Origin策略所致。为了进一步解释,MDN声明以下内容:
如果iframe和iframe的父文档是Same Origin,则返回一个Document(即,内联框架的嵌套浏览上下文中的活动文档),否则返回null。