我有一个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”的现有窗口,但不会从打开的窗口堆栈中将其向前移动。)
答案 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获得的数据。 它可能适合你。