Javascript,从opener调用子窗口函数不起作用

Ken*_*nia 13 javascript function popup window.open

我正在开发一个使用windows.open(..)打开弹出窗口的Web应用程序.我需要使用"window.open"返回的句柄在打开的窗口上调用一个函数,但我总是收到错误消息"addWindow.getMaskElements不是函数",好像它无法访问声明的函数在儿童窗口.这是IE和FF中的行为.我的代码看起来像这样:

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 ();
    }
}
Run Code Online (Sandbox Code Playgroud)

我用谷歌搜索并从不同的可靠来源阅读,显然这应该工作,但事实并非如此.还有一件事,子窗口中的函数在adicionar_email.htm文件中包含的单独的.js文件中声明.这有什么不同吗?它不应该..所以,如果有人遇到类似的问题,或者对我做错了什么有任何想法,请回复此邮件.提前致谢.

Kenia

Eri*_*rik 11

窗口创建不是阻塞操作; 当该窗口打开并加载HTML和javascript并解析它时,脚本继续执行.

如果您要在原始页面上添加如下链接:

<a href="#" onclick="addWindow.getMaskElements();">Test</a>
Run Code Online (Sandbox Code Playgroud)

你会发现它有效.(我试过这只是为了确定.)

**编辑**

其他人通过在目标文档中调用onload来发布变通方法,这是另一种方法:

function AddEmail()
{

        if(addWindow == null) {
        addWindow = window.open("test2.html",null,"height=220px, width=400px, status=no, resizable=no");
        }

        if(!addWindow.myRemoteFunction) {
            setTimeout(AddEmail,1000);
        } else { addWindow.myRemoteFunction(); }
}
Run Code Online (Sandbox Code Playgroud)

这一直试图每隔1秒调用addWindow.myRemoteFunction直到它成功调用它.


Ant*_*nes 5

问题是window.open返回得相当快,所请求的文档以及该文档随后可能引用的任何其他项目尚未加载到窗口中.

因此,尝试如此早地调用此方法将失败.您应该将函数附加到打开的窗口的加载事件,并尝试从该函数调用.