JavaScript异常“调用的对象已与其客户端断开连接。”在window.open(...)上

时间:2012-03-12 15:24:19

标签: javascript window.open

我有一个JavaScript文件附加到名为'navigate.js'的网页上它包含一系列方法,如下所示:

var ContractWindow;
function showContract(ContractID){
    try{
         if(ContractWindow){
            if(!ContractWindow.closed){
               ContractWindow.close;
            }
         }

        ContractWindow = window.open(contract.aspx?contractid=" + ContractID, "ContractEditor",
        "toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=0,resizable=1,width=780,height=615");
        }
    }catch(exc){
    alert(exc.message);
    }
}

(打开用于编辑产品类别,产品,地区等的页面的功能类似。)

多个函数中的每一个都在自己的窗口中打开一个不同的编辑器页面 ,其目标是任何给定类型的任何窗口(其中type =“ContractEditor”)都应该打开时间。

如果编辑器(在这种情况下是合同编辑器)被重用,我们首先要关闭上一个窗口,以便后续window.open将使新窗口出现在任何窗口的前面(有焦点)。 / p>

一切按预期工作直到页面空闲大约10分钟。之后警报消息显示:调用的对象已与其客户端断开连接

各种测试表明,异常来自于将window.open的返回值赋值给ContractWindow变量。如果我遗漏ContractWindow =并且只是致电window.open,它可以正常工作,但窗口不会“弹出”到最前端,这是一项要求。 (window.open重用名为“ContractEditor”的现有窗口,但不会从打开的窗口堆栈中将其向前移动。)

2 个答案:

答案 0 :(得分:1)

虽然更好的答案当然是受欢迎的,但我已经达成了“解决方案”,这将有助于将该功能“推出门”,尽管我希望更好地了解此异常的原因并提供更好的解决方案'如果它存在。

确定问题是由于尝试将window.open的返回值分配给var ContractWindow而引起的,我引入了一层误导,如下所示:

var ContractWindow;
function showContract(ContractID){
    try{
         if(ContractWindow){
            if(!ContractWindow.closed){
               ContractWindow.close;
            }
         }
        // assign the return of window.open to a 'guaranteed new' variable...
        var newWindow = window.open(contract.aspx?contractid=" + ContractID, "ContractEditor",
        "toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=0,resizable=1,width=780,height=615");
        // then re-assign to the global var ContractWindow.
        ContractWindow = newWindow;
        }
    }catch(exc){
    alert(exc.message);
    }
}

我认为JavaScript管理对象指针的方式必须有所不同...... 我所做的“有效”但不是我称之为“好”的...... 然后,墨菲定律总是有这个推论:

  

如果它很愚蠢但它有效,那就不是傻了。

答案 1 :(得分:0)

我的代码遇到了同样的问题, 尝试window.open open.window获得jQuery.extend(true, {}, data);的内容,请原谅他{{1}}状态。

我用{{1}}来克隆我从window.open获得的数据。 它可能适合你。