Javascript,从opener调用子窗口函数不';行不通
我正在开发一个web应用程序,它使用windows.open(..)打开一个弹出窗口。我需要使用“window.open”返回的句柄在打开的窗口上调用函数,但我总是收到错误消息“addWindow.GetMaskeElements不是函数”,好像它无法访问在子窗口上声明的函数一样。这是IE和FF中的行为。我的代码如下所示:Javascript,从opener调用子窗口函数不';行不通,javascript,function,popup,window.open,Javascript,Function,Popup,Window.open,我正在开发一个web应用程序,它使用windows.open(..)打开一个弹出窗口。我需要使用“window.open”返回的句柄在打开的窗口上调用函数,但我总是收到错误消息“addWindow.GetMaskeElements不是函数”,好像它无法访问在子窗口上声明的函数一样。这是IE和FF中的行为。我的代码如下所示: function AddEmail(target,category) { if(addWindow == null) { currentCat
function AddEmail(target,category)
{
if(addWindow == null)
{
currentCategory = category;
var left = getDialogPos(400,220)[0];
var top = getDialogPos(400,220)[1];
addWindow = window.open("adicionar_email.htm",null,"height=220px, width=400px, status=no, resizable=no");
addWindow.moveTo(left,top);
addWindow.getMaskElements ();
}
}
<a href="#" onclick="addWindow.getMaskElements();">Test</a>
<a href="#" onclick="addWindow.getMaskElements();">Test</a>
我在谷歌上搜索并阅读了来自不同可靠来源的信息,显然这应该是可行的,但事实并非如此。
还有一件事,子窗口中的函数在adicionar_email.htm文件中包含的一个单独的.js文件中声明。这有区别吗?不应该。。
所以,如果有人遇到了类似的问题,或者知道我做错了什么,请回复这条消息。
提前谢谢
Kenia窗口创建不是阻塞操作;当窗口打开、加载HTML和javascript并对其进行解析时,脚本将继续执行 如果要在原始页面上添加如下链接:
function AddEmail(target,category)
{
if(addWindow == null)
{
currentCategory = category;
var left = getDialogPos(400,220)[0];
var top = getDialogPos(400,220)[1];
addWindow = window.open("adicionar_email.htm",null,"height=220px, width=400px, status=no, resizable=no");
addWindow.moveTo(left,top);
addWindow.getMaskElements ();
}
}
<a href="#" onclick="addWindow.getMaskElements();">Test</a>
<a href="#" onclick="addWindow.getMaskElements();">Test</a>
这会一直尝试每隔1秒调用addWindow.myRemoteFunction,直到它成功调用为止。打开窗口后,您立即调用该函数;弹出窗口上的页面可能尚未加载,因此此时可能未定义函数。问题在于window.open返回的速度相当快,请求的文档以及该文档随后可能引用的任何其他项目尚未加载到窗口中
因此,尝试这么早调用此方法将失败。您应该将一个函数附加到打开的窗口的加载事件,并尝试从该函数进行调用。以下函数的问题是: 在父窗口中执行javascript时,子窗口不会加载。因此,来自父窗口的调用函数处于无限循环中,这将导致窗口崩溃
窗口创建不是阻塞操作;脚本继续 在窗口打开和加载HTML时执行& javascript并对其进行解析 如果要在原始页面上添加如下链接:
function AddEmail(target,category)
{
if(addWindow == null)
{
currentCategory = category;
var left = getDialogPos(400,220)[0];
var top = getDialogPos(400,220)[1];
addWindow = window.open("adicionar_email.htm",null,"height=220px, width=400px, status=no, resizable=no");
addWindow.moveTo(left,top);
addWindow.getMaskElements ();
}
}
<a href="#" onclick="addWindow.getMaskElements();">Test</a>
<a href="#" onclick="addWindow.getMaskElements();">Test</a>
这会一直尝试每隔1秒调用addWindow.myRemoteFunction
直到它成功地调用它
moveTo
是否有效?对于另一个函数,可能存在竞争条件;如果您将计时器设置为等待.getMaskElements
存在,它是否会完成?