【发布时间】:2016-07-03 04:15:47
【问题描述】:
通常我们将 JavaScript <script> 标签放在 HTML 文档的底部,就在结束 </body> 标签之前,这样做的好处是在 DOM and some more things 中的所有元素都已经可用之后执行它们。
但是,我使用的是frame document1,它确实有一个<frameset> 而不是<body> 标签。我不想将它们放在文档的<head> 中,因为它们无法立即访问3 下面的 DOM 元素。我也不想在标准正文标签中使用<iframe>s4。我试过了
<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,一个整洁的并排视图,显示两个文档并以复杂的方式将它们滚动在一起。
2:……我以前从未使用过它们,所以我想试一试。
3:这就是我最终得到的结果,毕竟 onload 处理程序是微不足道的。问题仍然存在,我很好奇。
4:工作正常,但需要复杂的 CSS 样式
【问题讨论】:
-
@jfriend00:我不想将脚本添加到框架中,我想将其添加到框架集文档中。
-
我认为
<frameset>只是假设包含<frame>或<frameset>标签。 -
@jfriend00:是的,这似乎是我的尝试没有成功的原因。有没有办法解决这个问题?
-
看来你已经知道答案了我的朋友……
-
您能否创建一个仅包含您的脚本的大小为零的帧并将该帧添加为最后一帧?如果框架知道它们所在的结构并且在同一个域上,它们都可以通过脚本相互引用。您仍然会遇到加载时间问题,因为您必须等到所有帧都加载完毕才能访问其中的 DOM。
标签: javascript html frames frameset script-tag