从Javascript函数调用BHO
问候,
我是MSDN / Windows编程/ MFC / IE扩展开发环境的新手。我希望将我的Firefox和Chrome插件移植到IE插件中。我已经在很大程度上成功创建了一个BHO,并且能够将我的代码注入每个IE窗口,如下所述 - http://msdn.microsoft.com/en-us/library/bb250489%28v=vs。 85%29.aspx
我只是坚持能够从javascript调用BHO功能的问题。只需要帮助即可打电话
window.HelloWorld.StoreInfo()来自javascript。请参阅下面的我的代码段。我的javascript识别window.HelloWorld,但不识别其中的函数。
我怀疑IDispatchEx与此有关。
STDMETHODIMP CHelloWorldBHO::SetSite(IUnknown* pUnkSite)
{
if (pUnkSite != NULL)
{
// Cache the pointer to IWebBrowser2.
HRESULT hr = pUnkSite->QueryInterface(IID_IWebBrowser2, (void **)&m_spWebBrowser);
if (SUCCEEDED(hr))
{
// Register to sink events from DWebBrowserEvents2.
hr = DispEventAdvise(m_spWebBrowser);
if (SUCCEEDED(hr))
{
m_fAdvised = TRUE;
}
}
}
else
{
// Unregister event sink.
if (m_fAdvised)
{
DispEventUnadvise(m_spWebBrowser);
m_fAdvised = FALSE;
}
// Release cached pointers and other resources here.
m_spWebBrowser.Release();
}
// Call base class implementation.
return IObjectWithSiteImpl<CHelloWorldBHO>::SetSite(pUnkSite);
}
void STDMETHODCALLTYPE CHelloWorldBHO::OnDocumentComplete(IDispatch *pDisp, VARIANT *pvarURL)
{
HRESULT hr = S_OK;
// Query for the IWebBrowser2 interface.
CComQIPtr<IWebBrowser2> spTempWebBrowser = pDisp;
// Is this event associated with the top-level browser?
if (spTempWebBrowser && m_spWebBrowser &&
m_spWebBrowser.IsEqualObject(spTempWebBrowser))
{
// Get the current document object from browser...
CComPtr<IDispatch> spDispDoc;
hr = m_spWebBrowser->get_Document(&spDispDoc);
if (SUCCEEDED(hr))
{
// ...and query for an HTML document.
CComQIPtr<IHTMLDocument2> spHTMLDoc = spDispDoc;
if (spHTMLDoc != NULL)
{
CComQIPtr<IHTMLWindow2> pWindow;
spHTMLDoc->get_parentWindow(&pWindow);
CComQIPtr<IDispatch> pScriptDisp(pWindow);
IDispatchEx *pScriptDispEx;
pWindow->QueryInterface(&pScriptDispEx);
DISPID did;
hr = pScriptDispEx->GetDispID(CComBSTR("HelloWorld"), fdexNameEnsure, &did);
CComVariant dest;
DISPPARAMS dp = { 0, 0, 0, 0 };
hr = pScriptDispEx->Invoke( did, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_PROPERTYGET, &dp, &dest, NULL, NULL );
}
}
}
}
BOOL CHelloWorldBHO::StoreInfo()
{
// Store params passed from javascript
return true;
}
由于安全限制,我不希望主要使用ActiveX。
谢谢。
没有找到相关结果
已邀请:
1 个回复
车料