在Google Chrome中的getElementById问题

5

我有这个简单的行

alert(window.parent.frames[0].document.getElementById('textToSearch').value);

我有2个框架,第一个框架中有一个id为“textToSearch”的文本字段。我想获取第二个框架中文本字段的值。上面的代码行在第二个框架的html文件中。我只在Google Chrome中遇到了这个错误,在IE或FF中都可以正常工作。

未捕获的类型错误:无法调用未定义的“getElementById”方法

有什么想法吗?

谢谢您提前。


这两个框架是否在同一个域名下? - Matchu
是的,两个框架都包含在一个索引页面中。 - tinti
'alert(window.parent.frames.length)'和'alert(window.parent.frames[0].toString())'会给你什么结果? - JBRWilkinson
对于第一个警告框,返回值为2(看起来是正确的),有两个帧。对于第二个警告框,返回值是[object DOMWindow]。 - tinti
2个回答

4

最后我找到了问题所在。我在本地文件上尝试使用以上代码时,使用Google Chrome由于安全设置的限制,这种情况是不可能的。如果我将所有文件移动到Web服务器上,就可以完美地运行了。

感谢大家的支持,此线程现在可以关闭。


1
您需要负责关闭线程,将一个答案(可以是您自己的或他人的)标记为已解决。 - August Lilleaas
好的,我明天会接受这个答案...就像工具提示上的建议一样。 - tinti

3

使用contentWindow.document代替document

var frame = window.parent.frames[0].contentWindow;
alert(frame.document.getElementById('textToSearch').value);

对于大多数浏览器,您也可以只使用contentDocument,但不适用于Internet Explorer 7或更早版本。


谢谢回答...但是没有用。我收到了“无法读取未定义的属性'document'”。如果我想通过警报查看变量'frame'中的内容,我会得到'未定义'。 - tinti
@tinti:很奇怪。在Chrome中,iframe元素没有document属性,但有contentWindowcontentDocument属性。如果它能找到框架,我给你的代码应该可以工作。 - Andy E
我不知道这是否是一个问题,但我使用框架而不是iframe。 <frameset cols="20%,*"> <frame name="frame1" id="frame1" src="f1.html"/> <frame name="frame2" id="frame2" src="f2.html"/> </frameset> - tinti
@tinti:我是指框架元素(习惯使然)。这些属性非常相似。contentDocument 在DOM level 2规范中有定义,但所有当前的浏览器都实现了contentWindow - Andy E
@tinti:恐怕不行,我看不出还可能有什么问题。 - Andy E
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接