#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