我在IE中使用window.opener.functionName()从子窗口调用父函数,这非常正常。但是,这在Chrome / Firefox中无效。
我试过window.top.functionName(); parent.window.top.functionName()和许多其他人。没有人工作。
任何人都可以帮忙!
修改
这是代码
请注意,我有2级层次结构。我需要从ChildCall2.jsp文件中调用Parent.jsp的updateHTML()函数
Parent.jsp
<!DOCTYPE html>
<html>
<head>
<TITLE>Parent function call test</TITLE>
<script>
function openwindow(url)
{
Hints=window.open(url, 'Hints', "resizable=yes,scrollbars=yes,width=475,height=225");
if(Hints.blur)
Hints.focus();
}
function updateHTML()
{
alert("Parent called successfully");
}
</script>
</head>
<body onFocus="">
<a href="javascript:openwindow('ChildCall.jsp')"> Click Me </a>
</body>
</html>
ChildCall.jsp
<!DOCTYPE html>
<html>
<head>
<TITLE>Child function call test</TITLE>
<script>
function openwindow(url)
{
Hints=window.open(url, 'Hints', "resizable=yes,scrollbars=yes,width=475,height=225");
if(Hints.blur)
Hints.focus();
}
function updateHTML1()
{
alert("Parent call function");
window.opener.updateHTML();
}
</script>
</head>
<body onFocus="">
<a href="javascript:openwindow('ChildCall2.jsp')"> Click Me </a>
</body>
</html>
ChildCall2.jsp
<!DOCTYPE html>
<html>
<head>
<TITLE>Child function2 call test</TITLE>
<script>
function openwindow(url)
{
Hints=window.open(url, 'Hints', "resizable=yes,scrollbars=yes,width=475,height=225");
if(Hints.blur)
Hints.focus();
}
function updateHTML2()
{
alert("Parent call function2");
window.opener.updateHTML1();
}
</script>
</head>
<body onFocus="">
<a href="javascript:updateHTML2()"> Click Me to call parent function </a>
</body>
</html>
答案 0 :(得分:1)
所有弹出式窗口都具有相同的名称(window.open(url, 'Hints', ...))
,这可能会使某些浏览器感到困惑,因此他们会认识到其他窗口是他们的开场白。
只是一个旁注,检测窗口是否有blur
方法是不必要的,只需Hints.focus()
。