2 Stimmen

JavaScript Exception "Das aufgerufene Objekt hat die Verbindung zu seinen Clients getrennt." on window.open(...)

Ich habe eine JavaScript-Datei mit dem Namen 'navigate.js' an eine Webseite angehängt. Sie enthält eine Sammlung von Methoden, die wie folgt aussehen:

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);
    }
}

(es gibt ähnliche Funktionen zum Öffnen von Seiten zur Bearbeitung von Produktkategorien, Produkten, Regionen...usw.)

Jede der verschiedenen Funktionen öffnet eine andere Editor-Seite in einem eigenen Fenster mit dem Ziel, dass zu jedem Zeitpunkt nur ein Fenster eines bestimmten Typs (mit type="ContractEditor") geöffnet ist.

Wenn ein Editor (in diesem Fall der Vertragseditor) wiederverwendet wird, wollen wir das vorherige Fenster zuerst schließen, damit nachfolgende window.open bewirkt, dass das neue Fenster vor allen anderen Fenstern erscheint (den Fokus hat).

Alles funktioniert wie erwartet bis die Seite etwa 10 Minuten lang inaktiv war. Danach wird die Warnmeldung angezeigt: Das aufgerufene Objekt hat die Verbindung zu seinen Clients getrennt

Verschiedene Tests haben ergeben, dass die Ausnahme durch die Zuweisung des Rückgabewerts von window.open an die Variable ContractWindow verursacht wird. Wenn ich weglasse ContractWindow = und rufen Sie einfach window.open Es funktioniert, aber das Fenster springt nicht in den Vordergrund, was eine Voraussetzung ist. (window.open verwendet das vorhandene Fenster mit dem Namen "ContractEditor" wieder, bringt es aber nicht aus dem Stapel der geöffneten Fenster nach vorne).

1voto

Cos Callis Punkte 4995

Obwohl bessere Antworten sicherlich willkommen sind, habe ich eine Lösung gefunden, die dazu dient, die Funktion "aus der Tür zu bekommen", obwohl ich gerne ein besseres Verständnis für die Ursache dieser Ausnahme und eine "bessere Lösung" bekommen würde, wenn es sie gibt.

Nachdem festgestellt wurde, dass das Problem aus dem Versuch resultiert, den Rückgabewert von window.open a var ContractWindow Ich habe eine Ebene der Irreführung wie folgt eingeführt:

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);
    }
}

Ich denke, es muss etwas anders in der Art und Weise JavaScript verwaltet Objektzeiger sein... Was ich getan habe, "funktioniert", aber es ist nicht das, was ich als "gut" bezeichnen würde... Andererseits gibt es aber auch immer diese Konsequenz zu Murphys Gesetz :

Wenn es dumm ist, aber funktioniert, ist es nicht dumm.

0voto

Yuri1992 Punkte 1

Ich hatte das gleiche Problem mit meinem Code, versuchen colne das, was Sie von window.open denn er ist abhängig von open.window Status.

i verwendet jQuery.extend(true, {}, data); um die Daten zu klonen, die ich von window.open erhalte. kann es für Sie funktionieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X