【问题标题】:JavaScript Exception "The object invoked has disconnected from its clients." on window.open(...)JavaScript 异常“调用的对象已与其客户端断开连接。”在 window.open(...)
【发布时间】:2012-03-29 00:25:35
【问题描述】:

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

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”的现有窗口,但不会将其从打开的窗口堆栈中移出。)

【问题讨论】:

  • 您在运行 Microsoft VBA 代码吗?
  • 没有。服务器上的 Asp.net/C#,客户端上带有 javascript(和一些 jquery)。浏览器是 IE 7/8

标签: javascript window.open


【解决方案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 管理对象指针的方式一定有什么不同... 我所做的“有效”,但不是我所说的“好”…… 然后,墨菲定律总是有这个推论:

如果它很愚蠢但有效,那么它并不愚蠢。

【讨论】:

    【解决方案2】:

    我的代码也有同样的问题, 尝试从window.open 获得的colne,因为他依赖open.window 状态。

    我使用jQuery.extend(true, {}, data); 克隆了从window.open 获得的数据。 它可能对你有用。

    【讨论】:

      猜你喜欢
      • 2016-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多