Я реализую метод Exec TWebBrowser на основе ответа this. Этот метод запускается всякий раз, когда возникает ошибка сценария. Теперь мне нужно получить информацию об ошибках.Как получить информацию об ошибке TWebBrowser
Я сначала достаю объект события TWebBrowser.
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;
И тогда я пытаюсь получить информацию мне нужно (как показано в this ссылки) с помощью GetIDsOfNames
и Invoke
функции интерфейса. Рабочий код Delphi для использования этих методов находится в документации по ссылке this.
Вот как я использую эти функции для объекта Event.
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);
Функция GetIDsOfNames
fuGetIDsOfNames выполняет должным образом, выводит приемлемое целое число DispatchId
и возвращает S_OK
.
Но функция Invoke
просто терпит неудачу. Он возвращает некоторое отрицательное целое число как HRESULT
и ничего не выводит MethodResult
.
Как я могу обойти это?
работает как шарм. –