iFrame和Javascript

时间:2012-01-24 12:19:04

标签: javascript html iframe

我有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(); 

我有什么遗漏,这似乎是一个非常直接的用例。

2 个答案:

答案 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">