2012-06-04 103 views
1

我正在为Internet Explorer构建浏览器扩展。目标是让用户能够点击工具栏按钮并在用户可能正在访问的任何网站上注入html。在Internet Explorer中注入HTML的工具栏按钮

我的班级正在实施IOleCommandTarget和IObjectWithSite,我设法通过向注册表添加一些信息来显示工具栏按钮,但是我只是无法访问html文档,因此我可以操纵它。有些调试显示我首先在IObjectWithSite.SetSite方法中执行,然后执行IOleCommandTarget.Exec方法。如果我将解决方案实现为BHO,我可以订阅SetSite方法中的webbrowser事件,但是当我尝试在Exec方法中执行同样的操作时,转换为WebBrowser失败。我如何构建这个非常小而简单的扩展?

+0

你是正确的,SetSite()将首先被调用。您应该能够查询您的网站是否与您的BHO具有相同的浏览器对象。你可以发布(最小量的)你的SetSite()实现的代码,并指出它失败的位置? –

回答

1

Toolbar.h

CComQIPtr<IWebBrowser2, &IID_IWebBrowser2> m_spWebBrowser2; 

Toolbar.cpp

STDMETHODIMP Toolbar::SetSite(IUnknown *pUnkSite) 
{ 
    HRESULT hr; 
    CComQIPtr<IServiceProvider> sp = pUnkSite; 
    if(!m_spWebBrowser2 && sp) 
    { 
     //BHO immediately eotjiman ToolBar does not get it to the Obtained through QueryService. 
     sp->QueryService(IID_IWebBrowserApp, IID_IWebBrowser2, (void**)&m_spWebBrowser2); 
    } 
    else 
    { 
     m_spWebBrowser2.Release(); 
     return E_POINTER; 
    } 

    . 
    . 
    . 
} 

我希望它能帮助:)