Как обработать событие onbeforeunload с помощью веб-браузера winform - PullRequest
1 голос
/ 17 января 2012

У меня точно такая же проблема с элементом управления WinForms WebBrowser и обработкой события javascript onbeforeunload, как в этом посте ( Как перехватить событие onbeforeunload в элементе управления WebBrowser? ). Я попробовал то же решение, что и представленное, чтобы привести событие onbeforeunload к IDispatch и вызвать метод Invoke. Я получаю эту ошибку при этом:

ч = -2147352319

Я разрабатываю в .NET 3.5 на WinXP, используя IE 6.0.

Я не поместил здесь код C #, потому что он точно такой же, как и в приведенной выше статье.

Код JavaScript:

function onBeforeUnload()
{
    if (window.cObject.isTransferred)
    {
        event.returnValue = "\nYou are requesting to exit.\n";                   
    }
    else
    {
        event.returnValue = "\nYou are DELETING this object!!!\n";
    }
}

1 Ответ

0 голосов
/ 17 января 2012

Ошибка переводится в 0x80020101, что, в свою очередь, приводит к SCRIPT_E_REPORTED (, вот как это сделать самостоятельно ). У Microsoft есть подтвержденная ошибка , которая, по их словам, часто встречается на многоядерных или многопроцессорных компьютерах, но может возникать и на однопроцессорных компьютерах. Microsoft объясняет, что это связано с вызовом интерфейсов COM.

Это резервное копирование истории в указанной вами ветке , где пользователь в конечном итоге следует ответу Ганса Пассанта, но получает эту ошибку. Изменяя объявления P / Invoke, ему удается решить проблему (ответ записан в самом вопросе).

Тем не менее другой источник предполагает , что это также может означать ошибку в самом скрипте. Если это так, вы должны быть в состоянии отследить ошибку сценария, обработав onScriptError.

Мои предложения:

  • попробуйте предложенный альтернативный подход в указанной теме (если вы еще не пробовали)
  • создать обработчик для onScriptError

РЕДАКТИРОВАТЬ: ОП попробовал некоторые предложения и обнаружил, что это, прежде всего, ошибка JavaScript (мое второе предложение): вместо event следует использовать window.event или обычную технику доступа к событиям, как описанный в этой статье Quirksmode .

...