下面是包含两个iframe的页面。这个页面有一个名为DoWork()的javascript函数,它可以通过window.top.DoWork.从任何帧调用
<html>
<head runat="server">
<title>TOP PARENT</title>
<script type="text/javascript">
function DoWork(callback)
{
// do work here
callback();
}
</script>
</head>
<body>
<iframe src="Frame1.htm"></iframe>
<iframe src="Frame2.htm"></iframe>
</body>
</html>
调用框架需要将引用传递给它自己的函数,以便可以从最顶端的父函数调用它。例如
<html>
<head runat="server">
<title>Some frame</title>
<script type="text/javascript">
function WorkIsDone()
{
alert('Work is done');
}
</script>
</head>
<body>
<input type="button" value="Do Work" onclick="window.top.DoWork(WorkIsDone);" />
</body>
</html>
问题:在框架中全局引用函数WorkIsDone(),以便最顶部的框架可以从函数DoWork()调用它,最有效的方法是什么?
请注意,我无法对调用中的帧索引进行硬编码。谢谢
更新:帧中可能存在嵌套帧。
回答我自己的问题。。。这就是我所想到的,但这是从顶部循环所有帧,直到找到当前窗口。也许有一种更有效的方法
<html>
<head runat="server">
<title>Some frame</title>
<script type="text/javascript">
function FindMe(source, me) {
for (var i = 0; i < source.frames.length; i++) {
if (source.frames[i] == me)
return source.frames[i];
var r = FindMe(source.frames[i], me);
if (r != null)
return r;
}
}
function WorkIsDone()
{
alert('Work is done');
}
</script>
</head>
<body>
<input type="button" value="Do Work" onclick="window.top.DoWork(FindMe(window.top, self).WorkIsDone);" />
</body>
</html>