Javascript TypeError:无法读取属性';getElementById';框架集
我有一个简单的代码,每次有新版本时都会刷新主页,但它只在Internet Explorer中工作。在其他浏览器中,我遇到以下错误:Javascript TypeError:无法读取属性';getElementById';框架集,javascript,frame,getelementbyid,frameset,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
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>
var num=0;
var版本;
var=false;
函数startLoad(){
var url=“version_telemark.html?”+(++num);
window.version.navigate(url);
}
函数endLoad(){
如果(启动){
var newVersion=version.document.getElementById(“version”).value;
如果(新版本!=当前版本){
当前版本=新版本;
var url=“telemark.html?”+(++num);
window.pane.navigate(url);
}
}
}
函数start(){
currVersion=version.document.getElementById(“版本”).value;
开始=真;
setInterval(“startLoad()”,200);
}
在我的其他文件中,我只有我想要编辑的文件,我有:
<input id="version" name="version" type="textbox" value="700">
我的另一个设计文件只有表格,但我们不需要在那里添加任何内容。两件事:
id
s的元素创建的自动全局变量,即使用version
作为全局变量,而不声明或初始化它。也许出于某种原因,automatic global在IE以外的浏览器上不起作用。我不喜欢依赖它们,因为它太容易对它们进行阴影处理,因此我建议在脚本顶部附近添加以下内容,以便有意获取元素:
var version = document.getElementById("version");
但你对这个问题的评论表明,不是这个问题,而是以下第2点:currVersion=version.document.getElementById(“version”).value中,可能需要vesrion.contentDocument
而不是version.document
代码>和类似行;也许JavaScript的强大的|
操作符有点奇怪:
var versionDoc = version.document || version.contentDocument;
// ...and then
currVersion = versionDoc.getElementById("version").value;
// ...and so on
旁注:为了让你自己和任何人在你清醒后维护代码,我还建议对
版本
框架
和版本
输入
使用不同的id
值,frameset
不再是HTML规范的一部分。在打开开发者工具控制台的情况下运行应用程序时,您是否看到任何其他错误?(出于安全原因,可能会阻止您访问框架文档。)在chrome上,它会向我发送以下错误:Uncaught TypeError:无法读取undefinedWell的“getElementById”属性,您收到的错误意味着version.document
不存在。之后,它向我显示了一个新错误:未捕获的安全性错误:未能从“HTMLFrameElement”读取“contentDocument”属性:阻止原点为“null”的帧访问原点为“null”的帧。协议、域和端口必须匹配。@HenriqueAlves:这意味着您使用的是本地文件,而不是web服务器提供的文件(在地址栏中,URL以文件开始://
)。一些浏览器,如Chrome,对本地资源应用同一来源策略,并强制执行该策略,就好像所有本地资源都来自不同的来源一样(因此不允许访问)。如果从web服务器加载它(例如,出于开发目的,localhost
),则源代码将匹配,而不会发生这种情况。最好是通过web服务器测试web内容,而不是使用文件://
URL。我对这一切感觉很糟糕,但现在它说了另一个错误:未捕获类型错误:无法读取未定义的联机属性“导航”10@HenriqueAlves:您可能需要contentWindow
来获取该位:window.pane.contentWindow.navigate(url)
@HenriqueAlves:嗯,就像版本
一样,该代码依赖于自动全局搜索。我也会将它切换到getElementById
。除了在浏览器中内置调试器、在代码运行时检查对象等等,什么都没有。祝你好运,