通常,我们将JavaScript <script>
标记放在HTML文档的底部,紧接在</body>
标记之前,这样做的好处是在DOM and some more things中所有元素都可用之后才执行它们。
但是,我使用的frame document 1确实具有<frameset>
而不是<body>
标记。我不想将它们放在文档的<head>
中,因为它们将无法立即访问下面的DOM元素。而且我也不想在标准正文标签中使用<iframe>
4。我试过了
<head>
<title>Framesets are interesting</title>
</head>
<frameset cols="50%,50%">
<frame id="frame-a" src="a.html">
<frame id="frame-b" src="b.html">
<script type="text/javascript">
console.log("hello world!");
console.log(document.getElementById("frame-a")); // this is what I'm after
</script>
</frameset>
但是,该脚本根本没有执行,甚至没有显示在DOM检查器中。当然,
<frameset>
只能包含<frame>
和<noframes>
标签。但是,真的没有办法让脚本在<frame>
标签之后执行吗? 仅供引用,将它们放在
</frameset>
like it's sometimes done with <body>
s之后也不起作用。1:是的,我知道他们已弃用。它们只是我项目的自然选择2,它是一个并排的整齐 View ,其中显示了两个文档,并以一种复杂的方式将它们一起滚动。
2:…而且我以前从未使用过它们,所以我想尝试一下。
3:这就是我最后的想法,毕竟onload处理程序是微不足道的。问题仍然存在,我很好奇。
4:工作正常,但需要复杂的CSS样式
最佳答案
<script>
元素只能出现在<head>
元素或<body>
元素中。它不能作为<frameset>
元素的子元素出现; <frameset>
只能包含<frame>
元素,<noframes>
元素或其他<frameset>
元素。参见Transitional DTD:
<!ELEMENT FRAMESET - - ((FRAMESET|FRAME)+ & NOFRAMES?) -- window subdivision-->
通常,由于DTD只是规则手册,因此浏览器很乐意将元素插入不属于DTD的其他元素中,因为DTD只是一个规则手册,但这并不总是发生的(例如,您永远不能放置任何其他元素不管您如何努力,都会将元素流到HTMLParagraphElement中),因此,如果浏览器拒绝将HTMLScriptElement放置在HTMLFrameSetElement中,这就是原因。
任何解决方法都将在框架集的
<script>
元素中或其中一个框架内放置<head>
元素。 (您也可以在<script>
元素中放置<noframes>
元素,因为<noframes>
具有与<body>
相同的内容模型,但是由于明显的原因,这不能解决您的问题。)关于javascript - 如何在框架集文档的 "body"中放入<script>?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36049988/