我有以下html代码:
<html>
<head>
<script type="text/javascript">
function GetDoc(x)
{
return x.document ||
x.contentDocument ||
x.contentWindow.document;
}
function DoStuff()
{
var fr = document.all["myframe"];
while(fr.ariaBusy) { }
var doc = GetDoc(fr);
if (doc == document)
alert("Bad");
else
alert("Good");
}
</script>
</head>
<body>
<iframe id="myframe" src="http://example.com" width="100%" height="100%" onload="DoStuff()"></iframe>
</body>
</html>
问题是我收到了“坏”的信息。这意味着iframe的文档没有正确获取,getdoc函数实际返回的是父文档。
如果你能告诉我哪里出了错,我将不胜感激(我希望将文档托管在iframe中。)
非常感谢。
3条答案
按热度按时间epfja78i1#
您应该能够使用以下代码访问iframe中的文档:
但是,如果框架中的页面是从其他域(如google.com)加载的,则无法执行此操作。这是因为浏览器的同源策略。
hlswsv352#
问题是,在ie中(我猜您正在测试的是ie)
<iframe>
元素有一个document
属性,该属性引用包含iframe的文档,并且在contentDocument
或contentWindow.document
财产。您需要的是:也,
document.all
并非在所有浏览器中都可用,并且是非标准的。使用document.getElementById()
相反slmsl1lt3#
如果您遇到跨域错误:
如果您可以控制iframe的内容,也就是说,如果它只是在跨源设置中加载,比如在amazon mechanical turk上,那么您可以通过
<body onload='my_func(my_arg)'>
属性,该属性用于内部html。例如,对于内部html,使用
this
html参数(是-this
已定义,并引用内部主体元素的父窗口):<body onload='changeForm(this)'>
在内部html中: