2012-01-17 3 views
1

У меня такая же проблема с элементом управления WinForms WebBrowser и обработкой события onbeforeunload javascript как это сообщение (How to intercept the onbeforeunload event in a WebBrowser control?). Я попробовал то же самое решение, которое было представлено, чтобы передать событие onbeforeunload в IDispatch и вызвать метод Invoke. Я получаю эту ошибку, делая так:Как обрабатывать событие onbeforeunload с помощью winform webbrowser

ч = -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"; 
    } 
} 
+0

Немного ОТ, но IE6, действительно? Ей более 10 лет, и даже Microsoft больше не хочет ее поддерживать, см. Http://www.ie6countdown.com/. Просто догадаться, но вы получите ту же ошибку с другой версией браузера? – Abel

+0

Я знал, что получу о IE6. К сожалению, да, IE6, это мир, в котором я сейчас живу, и должен продолжать жить до второго, возможно, третьего квартала этого года. –

ответ

0

ошибка приводит к 0x80020101, что, в свою очередь, переводит к SCRIPT_E_REPORTED (here's a how-to do this yourself). У Microsoft есть confirmed bug, которые, как они говорят, часто встречаются на многоядерных или многопроцессорных компьютерах, но могут возникать и на однопроцессорных компьютерах. Microsoft объясняет, что это связано с вызовом COM-интерфейсов.

Это подтверждает историю в your referred to thread, где пользователь в конце концов отвечает за ответ Ханса Пассанта, но получает эту ошибку. Изменяя объявления P/Invoke, ему удается решить проблему (ответ написан в самом вопросе).

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

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

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

EDIT : ОП попробовал некоторые предложения и выяснил, что это прежде всего ошибка JavaScript (мое второе предложение): вместо event, window.event, или общая технология доступа к событиям, описанная в этом документе Quirksmode article.

+0

У меня уже был альтернативный подход. Я считаю, что проблема может быть в javascript. Однако, когда я меняю javascript на то, где я больше не получаю ошибку, параметр 'result' Invoke всегда возвращается как null, поэтому появляется окно сообщения без текста. –

+0

Хорошо, я смог найти javascript, который сработал. Спасибо, что помогли Авелю. –

+0

@Edward, что, вероятно, означает, что ранее использовавшаяся JS содержала ошибку. Например, что в приведенном выше примере cObject не существует или что-то еще. – Abel

Смежные вопросы