![]() |
|
Модераторы: gambit, Partizan |
![]()
|
|
| Quietasice |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 2.8.2009 Репутация: нет Всего: нет |
Доброе время суток. Не подскажите, как можно отловить выполнение определенный JS функции в webBrowser? Или же как отловить нажатие ПКМ в определенном месте?
Событие не отлавливается, если не по тегу, а по самой области:
Условие отлавливается. То есть, цель такова: есть webBrowser, в него грузится несколько фреймов. Нахожу нужный. Далее при нажатии ПКМ в определенной области, должно выскакивать мое контекстное меню, которое я создал, вместо того меню, которое делает JS функция подгружаемая с сервера. У кого-то есть какие-то соображения по этому поводу. Был бы благодарен за любую помощь. |
||||
|
|||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 16 Всего: 142 |
Событие oncontextmenu есть у элементов, но не у коллекций элементов. В то же время метод getElementsByTagName возвращает коллекцию элементов и ты пытаешься одним махом повесить обработчик события на всю коллекцию. Если тебе нужно повесить обработчик на один элемент, то выбери его из коллекции, а если на все - обойди ее в цикле и повесь обработчик на каждый элемент.
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| Quietasice |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 2.8.2009 Репутация: нет Всего: нет |
скажем так, в webbrowser грузится около 5 фреймов, мне нужен только 1, я нахожу его и в него приходят сообщения(типа чата), сообщение приходят в таком виде "<span ontextmenu="return OnMenu(event,7)">сообщение</span>", вот при нажатии на это само "сообщение" выскакивает меню, которое сгенрированное функцией JS, мне либо нужно отлавливать эту функцию и глушить ее, при этот в замен выпускать свое контекстное меню, либо при нажатии ПКМ на это "сообщение" выпускать свое контекстное меню.
|
|||
|
||||
| diadiavova |
|
||||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 16 Всего: 142 |
Quietasice, Насколько я понимаю, это как раз случай, когда элементы надо обойти в цикле и повесить обработчик на каждый.
Добавлено через 3 минуты и 5 секунд То есть вместо
Написать что-то вроде
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
||||
|
|||||
| Quietasice |
|
||||||||
|
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 2.8.2009 Репутация: нет Всего: нет |
Спасибо, попробую так сделать. Я этот код вставляю в WebBrowser_DocumentComplete и получается, что это события будет несколько раз приписано, то есть, когда я вставлял:
тогда функция Browser_ClickStandardEvent выполняется N-ое кол-во раз, а не 1 раз, как хотелось |
||||||||
|
|||||||||
| diadiavova |
|
||||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 16 Всего: 142 |
Ни фига не понял. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
||||
|
|||||
| Quietasice |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 2.8.2009 Репутация: нет Всего: нет |
ну смотрите, тот код я вставляю в событие Browser_Documentcomplete, это событие происходит несколько раз, пока полностью загрузится страница. В этом событие я делаю:
и т.к. событие Browser_Documentcomplete происходит несколько раз, то и присваивание действия тоже происходит несколько раз. То есть, если я в функции Browser_ClickStandardEvent напишу MessageBox.Show("gcgfgfg"); то это сообщение выскачит несколько раз, хотя долго один раз, вот и не знаю как добиться этого 1го раза :( то есть присваивание этого действия должно быть только 1 раз после полной загрузки страницы. Но webbrowser реагирует на каждую загрузку(из каждого фрейма). А один из фреймов периодически обновляется (чат) и в итоге с каждым разом все чаще выполняется функция Browser_ClickStandardEvent p.s. сорри за опечатки, пишу с ноута с тачпадом, периодически курсор гуляет :( Это сообщение отредактировал(а) Quietasice - 12.4.2011, 01:41 |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 16 Всего: 142 |
Надо просто подобрать другое событие или другой способ обработки. Например в DocumentCompleted проверяй значение свойства Url второго аргумента обработчика и выполняй действие только в том случае, если урла соответствует адресу нужного фрейма. По поводу обновлений дело несколько сложнее, но в принципе, если обновления происходят не через аякс, а через обновление всего фрейма, то все равно подписываться придется при каждом обновлении, поскольку при обновлении это уже другая страница, и на события ее объектов надо подписываться заново.
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| Quietasice |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 2.8.2009 Репутация: нет Всего: нет |
Выдало ошибку тут:
Невозможно привести СОМ-объект типа "mshtml.HTMLSpanElementClass" к типу интерфейса событий "mshtml.HTMLDocumentEvents2_Event". Я так понимаю каждый elems.item(i) нужно привести к другому типу? если так, то к какому? Это сообщение отредактировал(а) Quietasice - 12.4.2011, 13:59 |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 16 Всего: 142 |
Возможно к этому mshtml.HTMLElementEvents_Event -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| Quietasice |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 2.8.2009 Репутация: нет Всего: нет |
о получилось, спасибо большое
Терь немного другая проблема. Мое контекстное меню отображается по клику на определенный тег, если выбрать какой-то пункт меню, то потом контекстное меню не отображается больше, пока фрейм не перегрузится, то есть пока не произойдет заново webBrowser_DocumentComplete Это сообщение отредактировал(а) Quietasice - 12.4.2011, 14:46 |
|||
|
||||
| Quietasice |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 2.8.2009 Репутация: нет Всего: нет |
Вот код этих действий:
Это сообщение отредактировал(а) Quietasice - 12.4.2011, 15:50 |
|||
|
||||
| Quietasice |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 2.8.2009 Репутация: нет Всего: нет |
ни у кого никаких соображений нет по этому поводу?
|
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 16 Всего: 142 |
Это надо запускать проект и сидеть разбираться, на вебстранице может быть много всего и все может быть сделано очень по разному, а так не скажешь. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| Quietasice |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 2.8.2009 Репутация: нет Всего: нет |
Проблема все еще актуальна. Кое-что выяснил:
Контекстное меню больше не вызывается до обновления при нажатии левой кнопки мыши в области фрейма, а если клацать все время правую кнопку мыши, тогда все норм, не нужно дожидаться следующего обновления фрейма, почему так? :( |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Разработка Windows Forms | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |