Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.90/10: Рейтинг темы: голосов - 10, средняя оценка - 4.90
nikola99
8 / 8 / 1
Регистрация: 02.05.2010
Сообщений: 23
1

Перехват javascript для определения, был ли запрос на подтверждение ухода со страницы

26.02.2012, 17:04. Просмотров 1764. Ответов 3
Метки нет (Все метки)

Нужно узнать вызывается ли месседж бокс в браузере при закрытии страницы с текстом вроде "Вы уверены что хотите покинуть страницу?" вызываемый событием onbeforeunload.

Пробовал парсить все яваскрипты в поисках установки обработчика события onbeforeunload или проверять свойство webbrowser IHTMLWindow2.onbeforeunload. Это работает, но этот способ просто определяет установлен ли обработчик, но не определяет точно ли будет вызвано сообщение.

Я могу узнать имя функции обработчик и вызвать ее в браузере или попробовать перенаправить бразуер на другую страницу, но как можно отследить что сообщение успешно появилось?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.02.2012, 17:04
Ответы с готовыми решениями:

Javascript для определения разрешения экрана.
Друзья, к вам огромная просьба: нужен java-скрипт! Скрипт следующего...

Для базы данных «Автомагазин» создать запрос для определения количества заявок на модель Classic Combi.
Очень нужна помощь в решении следующей задачи. 1. Для базы данных...

SQL запрос для определения текущего остатка
Не могу чуть разобраться как написать SQL запрос для определения текущего...

Написать запрос для определения средневзвешенной температуры
Добрый вечер,форумчане. Помогите мне реализовать такой запрос. Вот суть...

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

3
sau
1994 / 1610 / 264
Регистрация: 22.07.2011
Сообщений: 6,083
Завершенные тесты: 1
26.02.2012, 17:29 2
Нужно узнать вызывается ли месседж бокс в браузере
- Может чет не так понял, тебе нужно найти все JS функции которые подписаны на событие onbeforeunload и определить вызывают ли они MessageBox ?
но как можно отследить что сообщение успешно появилось
- на ум приходит только поиск соотвествующего диалогового окна через WinAPI, аля FindWindows., т.к самостоятельно парсить логику JavaScript-ов это еще больший гемор.
еще вариант это поставить хук на вызов апишной функции месседж бокса браузером.
1
nikola99
8 / 8 / 1
Регистрация: 02.05.2010
Сообщений: 23
26.02.2012, 17:33  [ТС] 3
Цитата Сообщение от sau Посмотреть сообщение
- Может чет не так понял, тебе нужно найти все JS функции которые подписаны на событие onbeforeunload и определить вызывают ли они MessageBox ?
Нужно узнать вызвался ли месседж бокс в браузере на самом деле.

Найти все js подписаные на событие onbeforeunload не проблема, проблема определить действительно ли они вызывают месседж бокс в браузере. Вот пример: установлен обработчик, но он работает в зависимости от какой то булевой глобальной переменной, на основе ее значения и определяется будет вызван месседж бокс или нет.

Из всего что я перепробовал, осталось только одна идея перехватывать вызов месседж бокса в webbrowser, но как это реализовать еще не нашел.

Добавлено через 3 минуты
Цитата Сообщение от sau Посмотреть сообщение
- Может чет не так понял, тебе нужно найти все JS функции которые подписаны на событие onbeforeunload и определить вызывают ли они MessageBox ?

- на ум приходит только поиск соотвествующего диалогового окна через WinAPI, аля FindWindows., т.к самостоятельно парсить логику JavaScript-ов это еще больший гемор.
еще вариант это поставить хук на вызов апишной функции месседж бокса браузером.
Да, тоже пришел к этому. Парсить js вообще не дело. А хук или поиск окна уже что то более реальное. Какими средствами можно это реализовать и куда смотреть?
0
sau
1994 / 1610 / 264
Регистрация: 22.07.2011
Сообщений: 6,083
Завершенные тесты: 1
26.02.2012, 17:38 4
Рой в сторону WinAPI, FindWIndows EnumChildWindows и т.п, на сайте www.pinvoke.net есть примеры импорта на c#-пе.
Хуки можно ставить либо на очередь сообщений путем функций SetWindowsHookEx, либо инжектить свою dll в адресное пространство подобпотного процесса и править таблицу импорта, заменяя вызов MessageBox на свое реализацию. Но все это как минимум на С++.
У Джефри Рихтера есть пару страниц в книге на этот счет - http://wm-help.net/books-online/book/59464/59464-16.html#h22

Но почему то мне кажется что твоя задача может быть решена иначе, без анализа вызова MessageBox-а, в конце концов какая разница был он или нет ?
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.02.2012, 17:38

Запрос для определения самой ранней даты рождения
Создать запрос на поиск самой ранней даты рождения сотрудников офиса в...

Заполнение форм, подтверждение и последующая обработка полученной страницы
Возможно ли как то заполнить формы на определённом сайте, принять введенные...

Перехват события JavaScript 3.0
День добрый. Только начинаю учится. Имеется код: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru