В настоящее время вы работаете в автономном режиме; ожидается повторное подключение к Интернету

Как определить, когда страницы выполняется загрузка элемента управления WebBrowser

ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.

Эта статья на английском языке:180366
Заявление об отказе относительно содержимого статьи о продуктах, поддержка которых прекращена
Эта статья содержит сведения о продуктах, поддержка которых корпорацией Майкрософт прекращена. Поэтому она предлагается как есть и обновляться не будет.
Аннотация
Элемент управления Internet Explorer WebBrowser вызывает событие DocumentCompleteПосле завершения загрузки веб-страницы. Можно создать обработчик событияфункция приложения для этого события. В статьедействия, необходимые для определения, если элемент управления WebBrowser завершенаЗагрузка веб-страницы.
Дополнительная информация
Элемент управления WebBrowser запускает событие DocumentComplete при его ReadyStateСвойство изменяется на READYSTATE_COMPLETE. Это означает, чтоЭлемент управления WebBrowser завершил загрузку веб-страницы. Вот нескольковажные моменты, касающиеся этого события:
  • Из страницы с фреймами не DocumentComplete срабатывает один раз После всего.
  • В случае существования нескольких рамок DocumentComplete получает возникает несколько раз. Не каждый кадр запускает это событие, но каждый кадр, который запускает Событие DownloadBegin запускается соответствующее событие DocumentComplete.
  • У события DocumentComplete IDispatch * параметр, являющийся IDispatch кадра (shdocvw), для которого срабатывает DocumentComplete.
  • Верхнего уровня кадра срабатывает DocumentComplete в конце. Таким образом, Чтобы проверить, если страница выполняется загрузка, необходимо проверить, если Параметр IDispatch * так же, как IDispatch элемента управления WebBrowser.

    Visual Basic ниже приведен код, выполняющий эту проверку.
    Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object,                                         URL As Variant)   If (pDisp Is WebBrowser1.Object) Then      Debug.Print "Web document is finished downloading"   End IfEnd Sub					
Для обработки события DocumentComplete в Visual C++ и определить, еслизавершена загрузка веб-страницы, выполните следующие действия.

Обратите внимание на то, что шаги зависит способ использования элемента управления WebBrowser.
  • При создании элемента управления WebBrowser в объекте CWnd/CView вывыполните действия 1-4.
  • При создании элемента управления WebBrowser в объект класса CDialog/CFormViewнеобходимо только выполнить шаг 4.
  • При использовании класса CHtmlView, поставляемые с Visual C++ 6.0переопределить CHtmlView::DocumentComplete() и выполните шаг 4, используяm_pBrowserApp члена класса CHtmlView доступа элемента управления WebBrowser.
  1. Определите метод OnDocumentComplete в файл заголовка для класса CWnd, CView производные:
    afx_msg void OnDocumentComplete(LPDISPATCH lpDisp,                                VARIANT FAR* URL);					
  2. Объявления обработчика событий в один и тот же файл заголовка:
    DECLARE_EVENTSINK_MAP()					
  3. В файле реализации (CPP)-CWnd, CView производного класса, Реализуйте карты приемника событий:
    BEGIN_EVENTSINK_MAP(CYourView, CView)   ON_EVENT(CWBTstView, ID_WEB_BROWSE, 259 /* DocumentComplete */,            OnDocumentComplete, VTS_DISPATCH VTS_PVARIANT)END_EVENTSINK_MAP()					
  4. Реализуйте метод OnDocumentComplete:
    void CWBTstView::OnDocumentComplete(LPDISPATCH lpDisp,                                    VARIANT FAR* URL){   IUnknown*  pUnk;   LPDISPATCH lpWBDisp;   HRESULT    hr;   pUnk = m_webBrowser.GetControlUnknown();   ASSERT(pUnk);   hr = pUnk->QueryInterface(IID_IDispatch, (void**)&lpWBDisp);   ASSERT(SUCCEEDED(hr));   if (lpDisp == lpWBDisp )   {      // Top-level Window object, so document has been loaded      TRACE("Web document is finished downloading\n");   }  lpWBDisp->Release();}					
Этот подход работает, когда элемент управления WebBrowser переходит на страницу,Изменение рамки верхнего уровня. Например, при переходе в пределах фреймасам то последний DocumentComplete, активизируемое является, рамкии фрейма верхнего уровня. Например рассмотрим следующую ситуацию.

Элемент управления WebBrowser размещается набор рамок. В пределах одного окнанабор фреймов, пользователь нажимает на ссылку, которая открывает новую страницу в рамкесам и сохраняет неизменными оставшейся части набора фреймов. Невозможно создать страницуснова содержат несколько кадров. Таким образом будет существовать несколько DocumentCompleteуведомления (по одному для каждого нового кадра). Но, поскольку у верхнего уровня кадровне изменяется, окончательный DocumentComplete бы рамки, наличиеизменен.

Если вы заинтересованы в проверке итоговый документ завершен на этомсценарий, можно сделать следующее:
Проверять, является ли параметр IDispatch DocumentComplete так же, как параметр IDispatch первое событие NavigateComplete2. Поскольку Первый NavigateComplete2 — фрейма верхнего уровня и последней DocumentComplete также верхнего уровня кадра, выполняется сравнение Таким образом определить, выполняется ли страницы загрузки.
Вот пример кода C++.
LPDISPATCH glpDisp = NULL; // global LPDISPATCH, can also                           // be of class scope// NavigateComplete2 eventvoid CWebbrDlg::OnNavigateComplete2Explorer1(LPDISPATCH pDisp,                                             VARIANT FAR* URL){   // Check if glpDisp is NULL. If NULL, that means it is   // the top level NavigateComplete2. Save the LPDISPATCH   if (!glpDisp)      glpDisp = pDisp;}void CWebbrDlg::OnDocumentCompleteExplorer1(LPDISPATCH pDisp,                                            VARIANT FAR* URL){   if (glpDisp && glpDisp == pDisp)   {      // if the LPDISPATCH are same, that means      // it is the final DocumentComplete. Reset glpDisp      TRACE("Document is done downloading");      glpDisp = NULL;   }}				
DocumentComplete

Внимание! Эта статья переведена автоматически

Свойства

Номер статьи: 180366 — последний просмотр: 06/04/2011 14:54:00 — редакция: 4.0

  • kbhowto kbmt KB180366 KbMtru
Отзывы и предложения
;