Доступ к имени фрейма приводит к исключению «Доступ запрещен»

#c# #.net #browser #mshtml

#c# #.net #браузер #mshtml

Вопрос:

Я создаю панель инструментов на C # для IE, и мне нужно получить доступ к определенному фрейму на веб-сайте. В моих начальных тестах я просто пытаюсь циклически перебирать фреймы и получаю всплывающее окно MessageBox с именем фрейма. Но всякий раз, когда я пытаюсь это сделать, я сталкиваюсь с исключением, говорящим «Доступ запрещен». Полный текст исключения таков:

Доступ запрещен. (Исключение из HRESULT: 0x80070005 (E_ACCESSDENIED))

Вот код:

 IHTMLSelectionObject currentSelection = myHTMLDocument.selection;

IHTMLFramesCollection2 frames = (IHTMLFramesCollection2)myHTMLDocument.frames;

for (int i = 0; i < frames.length; i  )
{
    object refIndex = i;

    IHTMLWindow2 currentFrame = (IHTMLWindow2)frames.item(ref refIndex);

    if (currentFrame != null)
    {
        MessageBox.Show(currentFrame.name);
    }
    else
        MessageBox.Show("Null");

}
  

Из моих поисковых запросов в Интернете я выяснил, что это, на самом деле, не ошибка. Ожидается, что он будет вести себя именно так. Мой вопрос: каков правильный способ сделать то, что я пытаюсь сделать?

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

Комментарии:

1. Я видел это: support.microsoft.com/kb/196340 , но я не знаю, есть ли более полный пример в C #.

Ответ №1:

Вероятно, вы получаете это сообщение, потому что пытаетесь получить доступ к фрейму из другого домена. Та же политика происхождения не позволяет вам делать это. Чтобы заставить это работать, используйте IServiceProvider.

 IServiceProvider isp = (IServiceProvider) currentFrame;
  

затем выполните запрос с помощью QueryService , чтобы получить объект IWebBrowser2.

Убедитесь, что вы используете System.Runtime.InteropServices