TypeError:无法读取属性'getElementById'框架集

时间:2014-12-12 15:23:18

标签: javascript frame getelementbyid frameset

我有一个简单的代码,每次有新版本时都会刷新主页面,但它只适用于Internet Explorer。在其他浏览器中,我收到以下错误:

Uncaught TypeError: Cannot read property 'getElementById' of undefined line 24

这是我的代码:

    <html>

    <script type="text/javascript">
     var num=0;
     var currVersion;
     var started=false;

     function startLoad() {
     var url= "version_telemark.html?"+ (++num);
        window.version.navigate(url);
     }

     function endLoad() {
       if (started) {
         var newVersion = version.document.getElementById("version").value;
         if (newVersion != currVersion) {
           currVersion=newVersion;
           var url  = "telemark.html?"+ (++num);
             window.pane.navigate(url);
         }
       }
     }
     function start() {
        currVersion = version.document.getElementById("version").value;
       started=true;
       setInterval("startLoad()", 200);
     }
    </script>

  <frameset    onload="start()"  cols="40%,100%">
    <frame id="version"   src="version_telemark.html"/>
    <frame id="pane" src="telemark.html" />
  </frameset>

</html>

在我的另一个文件中,我只想编辑我有:

<input id="version" name="version" type="textbox" value="700">

我的 design 的其他文件只有表格,但我们不需要在那里添加任何内容。

1 个答案:

答案 0 :(得分:0)

两件事:

  1. 您的代码依赖于浏览器为其上具有id s的元素创建的自动全局,使用version作为全局变量而不声明或初始化它。也许出于某种原因,自动全局不能在IE以外的浏览器上工作。无论如何我不想依赖它们,它们太容易遮挡它们,所以我建议通过在脚本顶部附近添加元素来有目的地获取元素:

    var version = document.getElementById("version");
    

    但是你对这个问题的评论表明它不是这个,而是下面的#2:

  2. 您的vesrion.contentDocument和类似行中可能需要version.document而不是currVersion = version.document.getElementById("version").value;;也许是JavaScript奇特强大的||运营商:

    var versionDoc = version.document || version.contentDocument;
    // ...and then
    currVersion = versionDoc.getElementById("version").value;
    // ...and so on
    

  3. 旁注:只是为了让自己和任何人在您理智后必须维护代码,我还建议id version和{frame的{​​{1}}值不同其中{1}} version