Камрад
|
Anafay
дык, по первому разу из вроде как непонятых - я же написал: "даже при пропихивании фокуса ввода предварительно на этот элемент и куда-то дальше потом.." - т.е. на экпериментальной страничке я одной функции ставлю на input фокус, меняю value, и перегоняю фокус дальше куда-нибудь, чтобы создать ситуацию из твоей цитаты "Remarks".. но за событие onblur при этом обработчик цепляется, а onchange - не возникает
по второму - так в тексте в комментарии я так же указал: <!-- элемент hidden, но на text та же фигня -->, т.е. с text ровно та же трабла..
Задача - умеренно дурацкая. Надо обмениваться неотображаемыми в общем случае данными между программой, в которую встроен ActiveX Internet Explorer, и собственно этим ActiveX-окном браузера. Программа-оболочка - моя, содержимое (страница со скриптами, локальная или с удаленного сервера) - чужое.
В окне браузера крутится какой-то скрипт по показу клиенту информации и по последовательной подготовке набора данных, которые должны по событиям скидываться в оболочку. Оболочка начинает "заготовку", и должна получать эти данные по готовности, и иметь возможность прервать сценарий (не просто прихлопнуть, а дать возможность корректно завершить возможные начатые операции с сервером).
Для начала решил сделать так:
1) загрузка стартовой страницы и запуск сценария - оболочка даст команду через IWebBrowser->Navigate(2)
2) готовность данных - оболочку легко повесить на событие изменения статусной строки (невидимой в моем случае), куда скрипт может пихать уведомление о готовности, а я уже отыщу нужный невидимый элемент и выколупаю оттуда текстик, записанный сценарием (можно видимый элемент, но в невидимом фрейме - потому и не обязательно hidden, годится text. не суть важно). Ну, может, в перспективе повешусь не на событие для IWebBrowser2, а куда-нибудь пониже - на IHTMLDocument(2), IHTMLElement, хотя там похлопотней - глубже копать придется..
3) подтверждение от оболочки сценарию о получении очередной порции данных, об отказе или о другой какой команде - я могу задать любому элементу страницы новое значение value, или еще какой именованный атрибут, но при такой смене значения событие onchange в окне браузера не возникает (см.выше), и, если в макетном скриптике я могу обрамить перебрасыванием фокуса, и повеситься в итоге не на onchange, а на onblur, то как заставить скакать фокус из оболочки - не сыскал. А почему не возникает onchange - так и не понял
Так что варианты - или понять, как заставить возникать onchange, либо искать что-то другое. Прикинул варианты - могу, в принципе, имитировать click на элемент, тогда можно за onclick зацепиться, или выполнить джаваскрипт-функцию с оговоренным заранее именем, но это дополнительные ходы, не очень красивое решение - просто замена фокуса со перестановкой фокуса (каламбурчик ). Ну, еще можно написать свой ActiveX, который вкрячивать в страницу, и все гонять через него. Такое решение выглядит более универсальным, но в условиях сильно сжатых сроков начинать писать и отлаживать ActiveX, чего я никогда раньше не делал - не очень бы хотелось..
|