Ошибка кнопки панели инструментов надстройки Internet Explorer - PullRequest
1 голос
/ 20 мая 2011

В настоящее время я разрабатываю кнопку панели инструментов IE на C #, которая должна иметь возможность получать содержимое текущей вкладки и работать с ней. Однако всякий раз, когда нажимается кнопка, вызывается функция IObjectWithSite.SetSite (мой код будет опубликован в конце) и возвращает следующую ошибку:

Невозможно привести COM-объект типа 'System .__ ComObject' для типа интерфейса SHDocVw.IWebBrowser2. Эта операция не удалось из-за вызова QueryInterface на 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;
}

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 21 мая 2011

Документированный способ для запроса IWebBrowser2 с сайта кнопки панели инструментов - это запрос IServiceProvider с сайта, а затем QueryService для IID_IWebBrowserApp

0 голосов
/ 31 мая 2011

Функция Exec вызывает SetSite перед фактическим выполнением. Чтобы обойти это и при этом функция Exec должна иметь возможность доступа к информации о браузере, функции SetSite и GetSite должны существовать в отдельном классе, к которому обращается функция Exec.

...