我有一个框架页....
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
"http://www.w3.org/TR/html4/frameset.dtd">
<html>
<head>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
<title>Main title</title>
<script type="text/javascript" src="JS.js"></script>
</head>
<frameset rows="10%,90%" id="frameid" name="frameName">
<frame src="FrameA.htm" name="F_A">
<frame src="FrameB.htm" name="F_B">
</frameset>
</html>
这是FrameA.htm; FrameB看起来类似
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8"/>
<script type="text/javascript" src="JS.js"></script>
<title>Frame A Title</title>
</head>
<body onload="parent.ldfunc()" class="Resize" id="idA">
Body of frame A
</body>
</html>
最后是一个javascript JS.js
function ldfunc () {
alert("window.self.name: " + window.self.name);
alert("window.self.document.body.id: " + window.self.document.body.id);
}
现在,这就是摩擦......
1)如果body标签中的onload子句是上面的parent.ldfunc(),则'self'似乎是框架页面,而不是页面A或页面B. ID显示为frameid。
2)如果onload子句是ldfunc()而没有父项,则“self”指向页面A或页面B按预期方式。即id显示为idA或iadB。
换句话说,自我似乎遵循功能位置,而不是页面。
为什么我试试这个?我将有几千页将被A加载到B中,我认为我可以省去将脚本放在每个标题中的必要性。
有没有办法让框架页面加载脚本全局并可供其他页面使用?
答案 0 :(得分:2)
窗口未动态引用。对窗口的引用是在声明函数时创建的,因此始终是函数所在位置的窗口引用。当你在声明时基本上将外部引用嵌入到函数中时,这称为闭包。
调用函数时,需要将上下文窗口作为参数传递。
将脚本放在顶部框架/窗口中。 使用以下函数调用函数:
top.funcName();
传递上下文。
top.funcName(window);