当存在frameset元素时,Safari中不知道文档内的元素

时间:2011-08-15 10:46:08

标签: html

使用Safari时尝试这行代码:document.main它给出了undefined但是当我删除框架集时它没有任何问题

使用IE浏览器我没有任何问题

你能告诉我吗?

<form id="main" name="main">
<body bgcolor="#FFFFFF">
<input type='hidden' name='LANGUAGE' value='<%= pageLanguage %>'>
<input type='hidden' name='userType' value='<%= user.getType() %>'>
</body>
<frameset cols="20, *" frameborder=0 >
    <frame src="include/blankpage.html" frameborder=0 scrolling="no" marginheight=0 marginwidth=0 noresize>
    <frame src="documents/ListConfidentialDocuments.jsp" name="frmList" id="frmList"  frameborder=0 marginheight=0 marginwidth=0 noresize >
</frameset>
</form>

3 个答案:

答案 0 :(得分:1)

您的代码看起来有些混乱。

首先,你要么使用框架集,要么不是。你也不能拥有框架集和正文内容,你需要决定你正在使用哪一个。

话虽如此,你所拥有的形式(如果你决定使用框架集)会进入其中一个框架。

我认为您可能需要花一点时间学习HTML。一个文档应该只包含一个body标记集,并且页面上显示的所有内容都需要包含在其中,包含的表单。

就我个人而言,我会考虑重新写这个,把你的表格放在身体内,并考虑使用iframe(如果你必须使用框架atall)。

<body>
<form [...]>
    <input type='hidden' name='LANGUAGE' value='<%= pageLanguage %>'>
    <input type='hidden' name='userType' value='<%= user.getType() %>'>
</form>
<iframe src="include/blankpage.html" [...]>
<iframe src="documents/ListConfidentialDocuments.jsp" [...]>
</body>

我认为你遇到问题的主要原因是你的HTML很乱。浏览器通常很擅长弄清楚你的意思要做什么但是在这种情况下我认为Safari无法做到这一点。

答案 1 :(得分:0)

由于name=main的元素是<form>document.forms.main应该有效。正如您还包括id一样,调用document.getElementById('main')也会有效。

但是,你的标记错误且不合逻辑。为什么将<form>包含在一个永远不会被看到的文档中,因为框架存在?你根本不应该使用框架;如果必须,请学习HTML的基础知识。对于不支持框架的浏览器,带有框架集+后备的HTML文档的DOM树应如下所示:

html
|__head
|   |__title
|__frameset
    |__frame
    |__frame
    |__noframes
        |__body //this is fallback content
            |__form (or anything else)

正如@Jamie所提到的,你可能想要使用iframe。

答案 2 :(得分:0)

给出的标记不是有效的HTML。在W3C validator&amp;处验证您的标记你会知道问题。修复那些&amp;所有人都可以跨浏览器工作。

最后,您可能希望开始使用CSS