我有iframes的以下页面:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-
transitional.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<script type="text/javascript">
alert("test");
elements = document.getElementById("reference").contentWindow.getElementLength();
alert("test2");
</script>
</head>
<frameset cols="20%,*">
<frameset rows="25%,*">
<frame src="./groups.html" name="types">
<frame src="./entities.jsp" name="entities">
</frameset>
<frame src="./reference.jsp" name="reference" id="reference">
</frameset>
</html>
在reference.jsp中,我有以下代码:
<html>
<head>
<script type="text/javascript">
function getElementLength(){
alert("in reference");
elements=document.getElementByClassName("link");
alert(elements.length);
}
</script>
</head><body>...</body></html>
我之前检查过有关在帧中使用Javascript的StackOverflow帖子,发现contentWindow可以解决问题,但在这种情况下,我只获得第一个警告 - “test”,并且永远不会达到id =“reference”的帧。我在Firebug中看到以下错误:
document.getElementById("reference") is null
elements = document.getElement...").contentWindow.getElementLength();
我有什么遗漏,这似乎是一个非常直接的用例。
答案 0 :(得分:2)
我认为问题是你的脚本在加载帧之前正在执行......
您可以执行以下操作以确保在执行脚本之前加载框架:
<script type="text/javascript">
function load() {
alert("test");
elements = document.getElementById("reference").contentWindow.getElementLength();
alert("test2");
}
</script>
<frameset cols="20%,*">
<frameset rows="25%,*">
<frame src="./groups.html" name="types">
<frame src="./entities.jsp" name="entities">
</frameset>
<frame src="./reference.jsp" name="reference" id="reference" onload="load()">
</frameset>
我在框架onload="load()"
中添加了reference
属性,并将您的脚本包装在load()
函数中。这将导致在加载reference
帧后执行代码。
答案 1 :(得分:0)
您的文档类型为过渡,不支持framset 尝试以下文档类型标记
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">