2012-03-12 140 views
2

我已经上了一个名叫“navigate.js”网页中的JavaScript文件它包含看起来像这样的方法的集合:JavaScript异常“调用的对象已与其客户端断开连接。”对window.open(...)

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将使新窗口到达任何窗口(有焦点)。

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

各种测试都显示异常来自将window.open的返回值赋值给ContractWindow变量。如果我离开了ContractWindow =并调用window.open,它的工作原理,但窗口不会“流行”到这是一个需求的最前沿。 (window.open重用名为“ContractEditor”现有的窗口,但不会打开的窗口堆栈把它向前。)

+0

你是运行Microsoft VBA代码? – j08691 2012-03-12 16:29:58

+0

编号Asp.net/C#在服务器上与JavaScript(和一些jquery)在客户端上。浏览器是IE 7/8 – 2012-03-12 16:44:21

回答

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的方式管理对象指针...... 我所做的“作品”,但它不是我所说的“好” ...... 话又说回来总是有这个推论墨菲定律

如果它很笨,但它的工作原理,它并不愚蠢。

0

我有同样的问题,我的代码, 尝试colne的,你从window.open得到,becuse他在open.window状态depand。

我用jQuery.extend(true, {}, data);克隆我从window.open获取数据。 它可能适合你。

相关问题