2008-11-27 5 views
1

В этом выпуске:Как получить содержимое фрейма с помощью mshtml?

У меня есть крючок в IE, который реагирует на событие WebBrowser.OnNavigateComplete2, чтобы проанализировать содержимое документа для получения точной информации.

Этот документ содержит рамки, поэтому я просматриваю HTMLDocument.frames. Для каждого из них я просматриваю свойство document.body.outerHTML для проверки содержимого.

Проблема в том, что строка, которую я ищу, никогда не отображается там, тогда как она отображается на финальной странице. Итак, я ищу не в том месте? Если он отображается, когда страница полностью загружена, то она загружается в какой-то момент, верно? Но в каком объекте я должен смотреть?

BTW, я не знаю, имеет ли это значение, но страница, которую я ищу, поступает из приложения ASP.NET.

public void OnNavigateComplete2(object pDisp, ref object url) 
{ 
    document = (HTMLDocument)webBrowser.Document; 

    mshtml.FramesCollection frames = document.frames; 
    for (int i = 0; i < frames.length; i++) 
    { 
     object refIdx = i; 
     IHTMLWindow2 frame = (IHTMLWindow2)frames.item(ref refIdx); 
     string frameContent = frame.document.body.outerHTML; 
    } 
} 

Благодарим за помощь.


@rams Это событие запускается много раз для каждой страницы, так что я решил, что каждый раз, когда в рамке загружаются, даже если я не получаю, чтобы поймать один я ищу. Если нет, каково будет событие, чтобы поймать содержимое фреймов?

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

ответ

1

Знаете ли вы, что имя/идентификатор кадра вы ищете? Если да, то в вашем случае NavigateComplete2, вы можете получить ссылку на кадр, как

iFrame frm = document.frames(<your frame id>); 

int readyState=0; 

while(frm.readystate !=4){ 
// do nothing. be careful to not create an endless loop 
} 

if(frm.readyState==4){ 
    // get your content now 
} 

HTH

+0

Я смотрю в это, thx. – Antoine 2008-12-05 14:29:08

0

Вы используете какую-то резьбу? Запуск браузера в отдельном потоке действительно испортит ситуацию. Попробуйте выполнить его в STAThread и проверьте, правильно ли вы получили результат.

+0

Я не использую любую резьбу, по крайней мере, явно. Есть ли способ проверить это/принудительное выполнение в том же потоке? – Antoine 2008-11-27 17:25:29

0

Причина, по которой ваша строка не отображается, связана с кадром. Управление веб-браузером запускает документ, чтобы завершить событие после загрузки основного документа. На этом этапе кадры еще не запросили источники. После анализа документа с помощью элемента управления веб-браузера запросы на источники фреймов возникают и загружаются.

Опишите пожалуйста, что вы пытаетесь осуществить.

 Смежные вопросы

  • Нет связанных вопросов^_^