Ich muss einen vollständigen Aufruf-Stapel abrufen, wenn eine Ausnahme in JavaScript in Internet Explorer 8 auftritt. Funktionsaufrufe können zwischen Rahmen auftreten, deren Nummer groß ist.
Aufrufstack erforderlich, um Protokolle an die Entwickler zu senden. Ich kann keinen Debugger verwenden, weil der Endbenutzer nicht mit diesem Problem umgehen muss.
Die aktuelle Lösung für JavaScripts vorausgesetzt es kann Callstack generieren ( Ссылка ). Es basiert auf arguments.callee.caller. Der Aufrufer gibt jedoch null (undefiniert) zurück, wenn die Funktion von außerhalb des aktuellen Rahmens aufgerufen wurde. Somit ist der erhaltene Callstack unvollständig.
Kann ich in diesem Fall den Namen eines Frames erhalten, von dem die Funktion aufgerufen wurde?
Lösung basierend auf Active Scripts Technology gibt ein Objekt vom Typ ScriptEngine: IHTMLDocument :: get_Script (IDispatch ** p)
Das Objekt "script" wird jedoch nicht in die Schnittstelle IActiveScript umgewandelt.
* Kann ich aus IE8 den für einen gegebenen Kontext zu verwendenden Link ScriptEngine herausholen, um die notwendigen Informationen zum Aufbau des Callstacks zu extrahieren?
Ich habe einen Weg gefunden, der nützlich sein könnte. Es nutzt die Idee von Rückrufen.
Definieren Sie die nächste einfache Funktion für jeden Frame:
%Vor%und nächste Funktionen nur für den oberen Frame:
%Vor%Windows sollte ein Array im obersten Frame sein, das alle Fensterobjekte (d. h. Frames) enthält. Verwendung:
%Vor%Ich habe ein paar Stunden damit verbracht, die genaue Reihenfolge wiederherzustellen, in der die Funktionen aufgerufen wurden, habe aber keine Lösung gefunden. Nur eine partielle Reihenfolge (Funktionen sind innerhalb von Rahmen korrekt sortiert) ist in diesem Code verfügbar.
Wenn Sie mehrere Server mit verschiedenen Codeversionen haben, können Sie einen Code hinzufügen, der Funktionskörper analysiert und dadurch mehr Informationen über die Aufrufreihenfolge erhält.
Hoffe, das hilft: -)
Tags und Links javascript internet-explorer exception-handling javascript-engine