1. 程式人生 > >mfc webbrowser判斷網頁載入完成

mfc webbrowser判斷網頁載入完成

mfc 的webbrowser是大家使用非常多的一種檢視操作網頁的一種控制元件,在使用中,判斷網頁什麼時候載入完成就顯得非常重要了。下面介紹我採用的一種方法,這種方法可以判斷網頁內部即使有frame網頁也是可以判斷成功。
在對話方塊裡新增一個webbrowser控制元件,在對話方塊的初始化函式OnInitDialog()中加入web控制元件預設載入的網頁。

//禁用IE指令碼錯誤
	m_web.put_Silent(TRUE);
	//預設開啟百度網頁
	m_web.Navigate(L"https://www.baidu.com/", NULL, NULL, NULL, NULL);

新增一個全域性變數:
在這裡插入圖片描述

//全域性變數的定義
LPDISPATCH glpDisp = NULL;

接下來為webbrowser控制元件新增NavigateComplete2Explorer1訊息
在這裡插入圖片描述
在NavigateComplete2Explorer1的訊息響應函式中新增下面程式碼:
在這裡插入圖片描述

void CMFCTestDlg::NavigateComplete2Explorer1(LPDISPATCH pDisp, VARIANT* URL)
{
	// TODO: 在此處新增訊息處理程式程式碼
	glpDisp = pDisp;
}

接下來為webbrowser控制元件新增DocumentCompleteExplorer1訊息響應
在這裡插入圖片描述


在DocumentCompleteExplorer1訊息響應函式中判斷網頁是否載入完成
在這裡插入圖片描述
程式碼如下:

	//獲取網址
	CString strUrl = URL->bstrVal;
	if (pDisp == glpDisp)
	{
		//根據網址判斷網頁是否載入完成
		if (strUrl == L"https://www.baidu.com/")
		{
			MessageBox(L"網頁載入完成!");
		}
	}

在這裡說一下判斷網頁載入完成的原理,DocumentComplete雖然字面意義是網頁載入完成後觸發的訊息響應,但是對於網頁內部包含有子框架網頁時,這種方式就不行了。因為frame裡的網頁載入完成,也會觸發這個訊息響應,因此結合網頁載入完成後網址是不變的來判斷網頁是否載入完成。
執行效果如下圖:
在這裡插入圖片描述