2012-03-12 142 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獲取數據。 它可能適合你。

相關問題