Ich implementiere die Exec-Methode von TWebBrowser basierend auf this Antwort. Diese Methode wird immer dann ausgelöst, wenn ein Skriptfehler auftritt. Jetzt muss ich Fehlerinformationen erhalten.Wie bekomme ich TWebBrowser Fehlerinformationen
Ich erhalte zuerst das Ereignisobjekt des TWebBrowser. Ich versuche, die Informationen, die ich brauche zu bekommen
var
Doc: IHTMLDocument2;
HTMLWindow: IHTMLWindow2;
Event: IHTMLEventObj;
MethodName: String;
MethodResult: OleVariant;
DispatchId: Integer;
Param: array of OleVariant;
begin
//Avoid non-error calls
if nCmdID != OLECMDID_SHOWSCRIPTERROR then
Exit;
//Get hold of the event object
Doc := MapForm.WebBrowser.Document as IHTMLDocument2;
if not Assigned(Doc) then
Exit;
HTMLWindow := Doc.parentWindow;
if not Assigned(HTMLWindow) then
Exit;
//Get the current event
Event := HTMLWindow.event;
Und dann (wie in this Link gezeigt) GetIDsOfNames
und Invoke
Funktionen der Schnittstelle. Ein funktionierender Delphi-Code für die Verwendung dieser Methoden befindet sich in this Dokumentationslink.
So verwende ich diese Funktionen für das Event-Objekt.
MethodName := 'errorMessage';
Result := Event.GetIDsOfNames(GUID_NULL, @MethodName, 1, SysLocale.DefaultLCID, @DispatchId);
Result := Event.Invoke(DispatchId, GUID_NULL, SysLocale.DefaultLCID, DISPATCH_METHOD, Param, @MethodResult, nil, nil);
Die GetIDsOfNames
fuGetIDsOfNames Funktion richtig ausgeführt wird, gibt ein akzeptabler ganze Zahl DispatchId
und gibt S_OK
.
Aber die Invoke
Funktion schlägt einfach fehl. Es gibt eine negative Ganzzahl als HRESULT
zurück und gibt nichts an MethodResult
aus.
Wie kann ich das umgehen?
Arbeiten wie ein Charme. –