通常我们将JavaScript < script>
标记放在HTML文档的底部,就在结束< / body>
标记之前,其好处是它们在DOM 以及更多内容中已经可用的所有元素之后执行。
然而,我正在使用框架文档 1 ,它有< frameset>
而不是< body>
标记。我不想将它们放在文档的< head>
中,因为它们不能立即访问 3 下面的DOM元素。我不想在标准正文标记 4 中使用< iframe>
。我已经尝试了
< head>
 < title>框架集很有趣< / 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( “帧-A”)); //这就是我追求的
 < / script>
< / frameset>

&#xA;&#xA; 然而,脚本根本没有执行< / em>,它甚至没有出现在DOM检查器中。当然,&lt; frameset&gt;
只能包含&lt; frame&gt;
和&lt; noframes&gt;
标记。但是,是否真的无法在&lt; frame&gt;
标记后执行脚本?
仅供参考引用,将它们放在&lt; / frameset&gt;
就像它有时使用&lt; body&gt;
s 一样也不起作用。
1:是的,我知道他们已被弃用了。它们只是我项目的自然选择 2 ,一个简洁的并排视图,显示两个文档并以复杂的方式将它们滚动在一起。
&#xA; 2:...和我之前从未使用它们,所以我想尝试一下。
&#xA; 3:这就是我最终的结果,毕竟一个onload处理程序是微不足道的。问题仍然存在,我很好奇。
&#xA; 4:工作正常,但需要复杂的CSS样式
答案 0 :(得分:5)
<script>
元素只能出现在<head>
元素或<body>
元素中。它不能显示为<frameset>
元素的子元素; <frameset>
只能包含<frame>
元素,<noframes>
元素或其他<frameset>
元素。请参阅Transitional DTD:
<!ELEMENT FRAMESET - - ((FRAMESET|FRAME)+ & NOFRAMES?) -- window subdivision-->
通常情况下,浏览器很乐意将元素插入其他不完全无视DTD所说的元素,因为DTD只是一个规则手册,但这并不总是发生(例如,你永远不会将任何其他流元素放入HTMLParagraphElement ,无论你怎么努力),所以如果浏览器拒绝在HTMLFrameSetElement中放置HTMLScriptElement,那么这就是原因。
任何变通方法都涉及在框架集的<script>
元素或其中一个框架中放置<head>
元素。 (您还可以在<script>
元素中放置<noframes>
元素,因为<noframes>
具有与<body>
相同的内容模型,但由于显而易见的原因,这不会解决您的问题。 )
答案 1 :(得分:1)
此处解决了类似的问题:Dynamically set frame src using javascript
<head>
<title>Framesets are interesting</title>
<script type="text/javascript">
function LoadPage(){
console.log("hello world!");
console.log(document.getElementById("frame-a")); // this is what I'm after
}
</script>
</head>
<frameset cols="50%,50%" onload="LoadPage();">
<frame id="frame-a" src="a.html">
<frame id="frame-b" src="b.html">
</frameset>
答案 2 :(得分:1)
您可以通过插入带有数据URI的框架来放置脚本:
<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">
<frame src="data:text/html,<script type='text/javascript'>with(parent) {
console.log('hello world!');
console.log(document.getElementById('frame-a'));
}</script>">
</frameset>
当然,你需要小心引号,脚本将在另一个领域运行。您可以使用parent
或top
访问外部文档的window
。