2013-09-20 5 views
0

На веб-кнопке есть кнопка выполняет JS windows.postmessage и отправляет некоторые данные. В C# bho Я хочу захватить эти данные и вызвать некоторые местные службы. Мне нужно знать, как это сделать.Добавить пользовательский обработчик windows.postMessage

  1. Можно ли напрямую обработать это сообщение в C#? Как это будет?
  2. Можно ли назвать метод BHO из javascript. Поэтому мы можем внедрить этот обработчик событий на веб-страницу, которая будет вызывать функцию bho. Это что-то, если мы не можем зафиксировать событие сообщения Windows post в C#.

ответ

0
  1. Вы не можете напрямую работать с формой скрипта java скрипта C#. Однако вы можете перехватить вызов нажатия кнопки и выполнить часть своего кода.
  2. Да, вам нужно опубликовать свой собственный COM-объект на странице. Затем введенные скрипты могут использовать этот объект для выполнения обратного вызова в BHO. Не уверен, как точно сделать это с C#, хотя никаких примеров кода не существует. C++ для ввода COM-объекта ниже, надеюсь, что он поможет

.

HRESULT AddProperty(SHDocVw::IWebBrowser2* pBrowser, _bstr_t bstrName, _variant_t varValue) 
{ 
    CComQIPtr<IHTMLDocument> spDoc = pBrowser->Document; 
    CComPtr<IDispatch> spScript; 
    spDoc->get_Script(&spScript); 

    _variant_t varResult; 
    HRESULT hr = spScript.GetPropertyByName(OLESTR("window"), varResult.GetAddress()); 
    CComQIPtr<IDispatchEx> spScriptEx = varResult; 

    DISPID id; 
    hr = spScriptEx->GetDispID(bstrName), fdexNameEnsure, &id); 
    if (SUCCEEDED(hr)) 
    { 
     DISPID propid = DISPID_PROPERTYPUT; 
     DISPPARAMS dp = {NULL, NULL, 1, 1}; 
     dp.rgdispidNamedArgs = &propid; 
     dp.rgvarg = &varValue; 

     hr = spScriptEx->InvokeEx(id, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYPUT, &dp, NULL, NULL, NULL); 
    } 
    return hr; 
} 
+0

Я имею в виду, что мне нужен обработчик событий в C# BHO для события postmessage javascript. – Jackie

+0

Попробуйте прослушать ** сообщение ** событие для целевого кадра – Andrey

+0

'DHTMLEventHandler Handler = новый DHTMLEventHandler ((IHTMLDocument2) webBrowser.Document); Handler.Handler + = новый DHTMLEvent (Logo_OnClick); htmlElement.onclick = Обработчик; 'Это работает для события click элемента. Мне нужно что-то подобное, но для события window.postMessage (data). – Jackie