Internet Explorer 插件工具栏按钮错误

本文关键字:按钮 错误 工具栏 插件 Explorer Internet | 更新日期: 2023-09-27 17:57:13

我目前正在开发一个 C# 中的 IE 工具栏按钮,该按钮应该能够获取当前选项卡的内容并使用它。 但是,每当单击该按钮时,都会调用IObjectWithSite.SetSite函数(我的代码将在末尾发布)并返回以下错误:

无法强制转换类型的 COM 对象 "System.__ComObject"到接口类型 SHDocVw.IWebBrowser2'.此操作 失败,因为查询接口调用 在 COM 组件上为 与 IID 的接口 '

加载网站时,该函数正常工作,但仅在单击工具栏中的按钮时引发此错误。 如前所述,调用 SetSite 函数,然后调用 IOleCommandTarget.Exec 函数。

所以,我想我的问题是:我应该将传递给 SetSite 函数的对象转换为什么,以便我可以访问 Internet Explorer 当前已打开的选项卡上的文档?

我目前这两个函数的相关代码如下:

int IObjectWithSite.SetSite(object site)
{
    String display = "";
    try { browser = (IWebBrowser2)site;}
    catch (Exception e) { display += e.Message + "'r'n"; }
    System.Windows.Forms.MessageBox.Show(display);
    return 0;
}

int IOleCommandTarget.Exec(IntPtr pguidCmdGroup, uint nCmdID, uint nCmdexecopt, IntPtr pvaIn, IntPtr pvaOut)
{
    if (form == null)
    {
        form = new SomeForm();
        form.InputText = "";
    }
    form.ShowDialog();
    return 0;
}

提前谢谢。

Internet Explorer 插件工具栏按钮错误

从工具栏按钮站点查询 IWebBrowser2 的记录方法是从站点查询 IServiceProvider,然后查询 QueryService 以获取IID_IWebBrowserApp

Exec 函数在实际执行之前调用 SetSite。 为了解决此问题,并且仍然使 Exec 函数能够访问有关浏览器的信息,SetSite 和 GetSite 函数应存在于 Exec 函数访问的单独类中。