色五月色开心色婷婷色丁香,五月婷婷丁香花综合网,婷婷丁香五月激情综合在线,五月婷婷六月丁香动漫,婷婷丁香五月激情综合在线,丁香花中文字幕在线观看,播五月色五月开心五月网,开心激情综合网,狠狠色丁香婷婷综合最新地址,丁香视频在线观看,狠狠做六月爱婷婷综合av,久久激情五月丁香伊人

ARTICLE DETAIL

資訊詳情

深耕商務建站與企業(yè)官網運營的一線實戰(zhàn)洞察。

VC++多頁瀏覽器開發(fā)實戰(zhàn):MFC與WebBrowser控件深度解析

VC++多頁瀏覽器開發(fā)實戰(zhàn):MFC與WebBrowser控件深度解析 1. 項目概述為什么用VC寫一個自己的多頁瀏覽器如果你是一名Windows平臺的C開發(fā)者尤其是經歷過MFC、ATL時代的“老炮兒”看到“VC實現(xiàn)的多網頁瀏覽器”這個標題可能會會心一笑。這不僅僅是一個課程設計或畢業(yè)項目它更像是一個時代的縮影和一次技術的深度回溯。在如今Electron、CEFChromium Embedded Framework大行其道的年代從頭用VC這里通常指Visual C特別是其經典的MFC框架打造一個瀏覽器聽起來有些“復古”但其背后的技術價值和學習意義遠超一個簡單的應用本身。這個項目的核心是深入Windows桌面應用開發(fā)的核心腹地。它不依賴于任何現(xiàn)成的瀏覽器內核封裝意味著你需要直面WebBrowser控件或更底層的COM接口、處理多文檔界面MDI/Tab、管理異步導航事件、處理腳本交互等一系列底層問題。通過它你能徹底理解一個瀏覽器外殼Browser Shell是如何工作的明白進程內In-Process與進程外Out-of-ProcessActiveX控件的差異并深刻體會到Windows消息循環(huán)、COM線程模型與Web異步世界交織時的復雜性。最近社區(qū)里關于VC運行時庫安裝、調試文件生成、快捷鍵實現(xiàn)的討論熱度不減這恰恰說明了仍有大量遺留或特定領域的桌面應用依賴于這套技術棧。實現(xiàn)一個多頁瀏覽器正是串聯(lián)起這些知識點的最佳實踐你需要處理運行時庫的依賴確保程序分發(fā)到用戶電腦上能正常運行你需要生成詳細的調試信息以應對瀏覽器控件那令人頭疼的崩潰問題你還需要設計一套高效的快捷鍵系統(tǒng)來管理多個標簽頁的切換、刷新與關閉。所以這不僅僅是一個瀏覽器它是一個Windows桌面開發(fā)技術的綜合演練場。接下來我將帶你從零開始拆解其中的每一個關鍵技術環(huán)節(jié)分享那些官方文檔不會寫的實操細節(jié)和踩坑經驗。2. 核心架構設計從單窗口到多頁簽的演進之路2.1 技術選型為什么是MFC與WebBrowser控件在VC生態(tài)中實現(xiàn)瀏覽器功能首選的快速方案是使用MFCMicrosoft Foundation Classes和其封裝的CHtmlView類或者更底層地使用ActiveX控件Microsoft Web Browser。CHtmlView本質上就是一個封裝了WebBrowser ActiveX控件的視圖類它提供了諸如Navigate、GoBack、Refresh等高層接口極大簡化了開發(fā)。為什么這么選原生與高效WebBrowser控件實際上是IEInternet Explorer的渲染引擎Trident的ActiveX封裝。它深度集成于Windows系統(tǒng)無需額外分發(fā)巨大的瀏覽器內核程序體積小巧。COM技術典范瀏覽器控件是一個典型的COM組件通過VC進行開發(fā)是學習并實踐COM客戶端編程的絕佳案例。你需要處理接口指針如IWebBrowser2、處理連接點Connection Points以接收事件如BeforeNavigate2、DocumentComplete。與MFC天然契合MFC對ActiveX控件有良好的支持通過ClassWizard可以輕松為控件添加事件處理映射和消息映射將COM事件轉換為熟悉的MFC消息處理函數(shù)。注意WebBrowser控件依賴的IE內核已停止更新對現(xiàn)代Web標準如CSS3、ES6支持有限。此方案適用于開發(fā)內網應用、需要與本地COM組件深度交互的專用瀏覽器或作為學習項目。若追求現(xiàn)代Web兼容性應考慮CEF或WebView2。2.2 界面架構SDITab Control vs. MDI多頁瀏覽器的核心是同時管理多個網頁實例。在MFC中主要有兩種界面架構思路方案一SDI Tab Control推薦這是目前主流瀏覽器的實現(xiàn)方式。創(chuàng)建一個單文檔界面SDI在主框架窗口CMainFrame上放置一個標簽控件CTabCtrl。每個標簽頁對應一個獨立的瀏覽器視圖CHtmlView或其派生類窗口。優(yōu)點界面現(xiàn)代用戶體驗好標簽管理邏輯清晰內存和資源管理相對直接每個標簽頁是一個獨立的View窗口。實現(xiàn)關鍵需要動態(tài)創(chuàng)建、顯示、隱藏和銷毀承載CHtmlView的子窗口并同步更新標簽控件的顯示。方案二多文檔界面MDI利用MFC內置的MDI框架每個網頁在一個獨立的子窗口CMDIChildWnd中打開每個子窗口內包含一個CHtmlView。優(yōu)點MFC原生支持窗口管理層疊、平鋪由框架完成實現(xiàn)快速。缺點每個網頁都是一個完整的帶邊框、標題欄的窗口不符合現(xiàn)代瀏覽器的使用習慣資源開銷相對較大。我們的選擇采用SDI Tab Control方案。它更貼近真實產品也讓我們能更深入地控制窗口和消息的生命周期。2.3 程序生命周期與運行時庫考量在你開始編碼之前必須處理好VC運行時庫Runtime Library的依賴問題。這是無數(shù)新手部署程序時遇到的第一個“攔路虎”。你的程序在編譯時需要鏈接C/C運行時庫。編譯選項通常在“項目屬性 - C/C - 代碼生成 - 運行時庫”中設置/MD或/MDd動態(tài)鏈接到運行時庫的多線程DLL版本。你的程序會依賴msvcrt.dll等系統(tǒng)DLL。發(fā)布時目標機器上必須存在對應版本的VC Redistributable Package。/MT或/MTd靜態(tài)鏈接運行時庫。運行時庫代碼會被打包進你的EXE程序體積變大但部署簡單無需額外安裝運行庫。實操心得 對于像瀏覽器這樣的項目我強烈建議在開發(fā)調試階段使用**/MDd**Debug動態(tài)鏈接以方便調試。在發(fā)布Release版本時權衡部署便利性和程序體積如果目標環(huán)境確定如企業(yè)內網且已統(tǒng)一安裝對應版本的VC運行庫可使用**/MD**。如果希望用戶“開箱即用”避免“缺少vcruntime140.dll”的錯誤可以選擇**/MT**進行靜態(tài)鏈接。但要注意靜態(tài)鏈接可能會帶來一些許可合規(guī)性上的考量需閱讀VC運行時庫的許可協(xié)議。從網絡熱詞可以看到微軟官網提供了從VC 2005到最新v14VS2017-2026的全套可再發(fā)行組件包。如果你選擇動態(tài)鏈接/MD在制作安裝包時務必包含或引導用戶安裝對應版本的VC_redist.x64.exe或VC_redist.x86.exe。3. 核心模塊實現(xiàn)詳解3.1 主框架與標簽頁管理首先我們使用AppWizard創(chuàng)建一個基于對話框Dialog-based或單文檔SDI的MFC項目。為了更好的控制我傾向于從CFrameWnd派生主窗口。1. 主框架窗口CMainFrame設計在主框架中我們創(chuàng)建以下核心成員class CMainFrame : public CFrameWnd { // ... private: CTabCtrl m_wndTab; // 標簽控件 CImageList m_tabIcons; // 標簽圖標列表 CMapUINT_PTR, UINT_PTR, CHtmlViewEx*, CHtmlViewEx* m_mapTabIdToView; // 標簽ID到視圖的映射 CHtmlViewEx* m_pActiveView; // 當前活動視圖 int m_nNextTabId; // 下一個標簽ID };CHtmlViewEx是我們從CHtmlView派生的自定義類用于增強功能。2. 標簽頁的動態(tài)創(chuàng)建與關聯(lián)當用戶點擊“新建標簽頁”按鈕或菜單時執(zhí)行以下操作void CMainFrame::OnNewTab() { // 1. 為新的瀏覽器視圖創(chuàng)建容器窗口通常是一個Pane或靜態(tài)控件區(qū)域 CRect rect; m_wndClientArea.GetClientRect(rect); // 假設m_wndClientArea是標簽頁下方的內容區(qū) CHtmlViewEx* pNewView new CHtmlViewEx; // 2. 創(chuàng)建視圖窗口注意樣式要包含WS_CHILD并使其不可見初始 if (!pNewView-Create(NULL, NULL, WS_CHILD | WS_VISIBLE, rect, this, IDC_BROWSER_VIEW_BASE m_nNextTabId)) { delete pNewView; return; } // 3. 導航到初始頁面如空白頁或主頁 pNewView-Navigate2(_T(about:blank), 0, NULL); // 4. 向標簽控件添加新標簽 TCITEM tci {0}; tci.mask TCIF_TEXT | TCIF_IMAGE; CString strTitle _T(新標簽頁); tci.pszText strTitle.GetBuffer(); tci.iImage 0; // 使用圖標列表中的第一個圖標如地球圖標 int nTabIndex m_wndTab.InsertItem(m_wndTab.GetItemCount(), tci); strTitle.ReleaseBuffer(); // 5. 建立映射關系并激活此標簽 UINT_PTR nTabId (UINT_PTR)pNewView-GetSafeHwnd(); // 或用自增ID m_mapTabIdToView.SetAt(nTabId, pNewView); m_wndTab.SetItemData(nTabIndex, nTabId); // 6. 隱藏所有視圖只顯示當前活動的 ShowViewForTab(nTabIndex); m_nNextTabId; }關鍵點CHtmlView::Create的最后一個參數(shù)是子窗口ID這里我們使用一個基準ID動態(tài)生成便于消息路由。視圖窗口的父窗口必須是主框架或一個特定的客戶區(qū)容器不能是標簽控件本身。3. 標簽切換與視圖顯示響應標簽控件的TCN_SELCHANGE通知消息void CMainFrame::OnTabSelChange(NMHDR* pNMHDR, LRESULT* pResult) { int nSel m_wndTab.GetCurSel(); if (nSel ! -1) { ShowViewForTab(nSel); } *pResult 0; } void CMainFrame::ShowViewForTab(int nTabIndex) { UINT_PTR nTabId m_wndTab.GetItemData(nTabIndex); CHtmlViewEx* pView NULL; if (m_mapTabIdToView.Lookup(nTabId, pView) pView) { // 隱藏所有視圖 POSITION pos m_mapTabIdToView.GetStartPosition(); UINT_PTR key; CHtmlViewEx* pTempView; while (pos ! NULL) { m_mapTabIdToView.GetNextAssoc(pos, key, pTempView); if (pTempView pTempView-GetSafeHwnd()) { pTempView-ShowWindow(SW_HIDE); } } // 顯示并激活選中的視圖 pView-ShowWindow(SW_SHOW); pView-SetFocus(); m_pActiveView pView; // 更新地址欄、標題欄等UI根據pView的當前URL和標題 UpdateAddressBar(pView-GetLocationURL()); UpdateWindowTitle(pView-GetLocationName()); } }3.2 增強型瀏覽器視圖類CHtmlViewEx直接使用CHtmlView功能有限我們需要派生一個類來增強它特別是處理事件和擴展接口。1. 獲取并處理WebBrowser事件CHtmlView通過OnBeforeNavigate2等虛函數(shù)提供事件通知但有時我們需要更精細的控制或訪問底層接口。class CHtmlViewEx : public CHtmlView { protected: DECLARE_DYNCREATE(CHtmlViewEx) DECLARE_EVENTSINK_MAP() // 聲明事件接收映射 // 覆蓋基類虛函數(shù)以處理導航事件 virtual void OnBeforeNavigate2(LPCTSTR lpszURL, DWORD nFlags, LPCTSTR lpszTargetFrameName, CByteArray baPostedData, LPCTSTR lpszHeaders, BOOL* pbCancel); virtual void OnDocumentComplete(LPCTSTR lpszURL); virtual void OnTitleChange(LPCTSTR lpszText); virtual void OnNavigateComplete2(LPCTSTR strURL); // 添加事件接收器以處理更多事件如NewWindow3阻止彈出窗口 BEGIN_EVENTSINK_MAP(CHtmlViewEx, CHtmlView) ON_EVENT(CHtmlViewEx, AFX_IDW_PANE_FIRST, 259 /* DISPID_NEWWINDOW3 */, OnNewWindow3, VTS_DISPATCH VTS_PBOOL VTS_DWORD VTS_BSTR VTS_BSTR) END_EVENTSINK_MAP() void OnNewWindow3(LPDISPATCH* ppDisp, BOOL* Cancel, DWORD dwFlags, LPCTSTR bstrUrlContext, LPCTSTR bstrUrl); // 獲取底層IWebBrowser2接口 IWebBrowser2* GetIWebBrowser2() const { return m_pBrowserApp; } private: CString m_strCurrentTitle; };在OnDocumentComplete或OnTitleChange中我們可以通知主框架更新對應標簽的標題void CHtmlViewEx::OnTitleChange(LPCTSTR lpszText) { CHtmlView::OnTitleChange(lpszText); m_strCurrentTitle lpszText; // 獲取主框架并發(fā)送自定義消息通知標題改變 CMainFrame* pMain (CMainFrame*)AfxGetMainWnd(); if (pMain) { pMain-PostMessage(WM_USER_UPDATE_TAB_TITLE, (WPARAM)GetSafeHwnd(), (LPARAM)(LPCTSTR)m_strCurrentTitle); } }2. 實現(xiàn)快捷鍵支持網絡熱詞中提到了“vc 編程中如何實現(xiàn)快捷鍵”這在瀏覽器中至關重要。快捷鍵處理通常在主框架級別進行。首先在資源文件中定義快捷鍵表Accelerator Table添加如CtrlT新建標簽、CtrlW關閉標簽、CtrlTab下一個標簽、CtrlShiftTab上一個標簽、F5刷新、CtrlF5強制刷新等條目。然后在主框架的PreTranslateMessage函數(shù)中翻譯快捷鍵BOOL CMainFrame::PreTranslateMessage(MSG* pMsg) { // 先讓快捷鍵表處理 if (m_hAccelTable ::TranslateAccelerator(m_hWnd, m_hAccelTable, pMsg)) return TRUE; // 如果當前活動視圖有輸入焦點可以優(yōu)先讓視圖處理例如Web頁面內的CtrlF查找 if (m_pActiveView m_pActiveView-GetSafeHwnd()) { // 可以檢查消息是否是鍵盤消息并判斷目標窗口是否為瀏覽器視圖或其子控件 if (pMsg-message WM_KEYFIRST pMsg-message WM_KEYLAST) { HWND hWndFocus ::GetFocus(); if (m_pActiveView-IsChild(CWnd::FromHandle(hWndFocus))) { // 瀏覽器控件自身可能處理了一些快捷鍵如CtrlP打印這里可以選擇不攔截 // 或者我們可以攔截特定的、需要框架處理的快捷鍵 if (pMsg-message WM_KEYDOWN) { BOOL bCtrl (::GetKeyState(VK_CONTROL) 0x8000); switch (pMsg-wParam) { case T: if (bCtrl) { OnNewTab(); return TRUE; } break; case W: if (bCtrl) { OnCloseCurrentTab(); return TRUE; } break; case VK_TAB: if (bCtrl) { CycleTabs(bCtrl 0x8000, ::GetKeyState(VK_SHIFT) 0x8000); return TRUE; } break; } } } } } return CFrameWnd::PreTranslateMessage(pMsg); }實操心得處理瀏覽器快捷鍵時要注意消息傳遞的優(yōu)先級。WebBrowser控件自身會處理很多快捷鍵如CtrlF、CtrlP。我們的框架快捷鍵如CtrlT/W應該在PreTranslateMessage中盡早處理而頁面內的快捷鍵則交給瀏覽器控件。TranslateAccelerator是處理標準菜單快捷鍵的利器。3.3 地址欄、導航與進度顯示1. 地址欄與導航在主框架上添加一個編輯框地址欄和一個“轉到”按鈕。當用戶在地址欄輸入URL并回車或點擊按鈕時void CMainFrame::OnGo() { CString strUrl; m_wndAddressBar.GetWindowText(strUrl); if (!strUrl.IsEmpty()) { if (m_pActiveView) { // 簡單的URL格式檢查與補全 if (strUrl.Find(_T(://)) -1) { strUrl _T(http://) strUrl; } m_pActiveView-Navigate2(strUrl, 0, NULL); } } }同時在CHtmlViewEx::OnBeforeNavigate2中可以將正在導航的URL實時更新到地址欄提供即時反饋。2. 進度顯示與標題更新通過處理CHtmlViewEx的OnProgressChange和OnTitleChange事件可以更新狀態(tài)欄或標簽頁的標題。void CHtmlViewEx::OnProgressChange(long nProgress, long nProgressMax) { CMainFrame* pMain (CMainFrame*)AfxGetMainWnd(); if (pMain nProgressMax 0) { int nPercent (int)((nProgress * 100) / nProgressMax); pMain-SetProgress(nPercent); // 更新主框架進度條 } } void CHtmlViewEx::OnTitleChange(LPCTSTR lpszText) { CHtmlView::OnTitleChange(lpszText); // 發(fā)送自定義消息給主框架更新對應標簽的標題 // ... (代碼如前所述) }標簽頁的標題通常顯示為網頁標題GetLocationName或URLGetLocationURL。一個常見的優(yōu)化是當標題過長時在標簽上顯示省略形式。4. 高級功能與穩(wěn)定性加固4.1 崩潰轉儲Dump文件生成“vc 崩潰生成調試文件”是調試復雜ActiveX控件問題的生命線。當瀏覽器控件因網頁腳本或插件崩潰時我們需要捕獲現(xiàn)場。1. 設置異常處理器在應用程序初始化時如CWinApp::InitInstance中使用SetUnhandledExceptionFilter設置頂層的異常處理函數(shù)。// 全局異常處理函數(shù) LONG WINAPI MyUnhandledExceptionFilter(struct _EXCEPTION_POINTERS* pExceptionInfo) { // 生成Dump文件 GenerateMiniDump(pExceptionInfo); // 可以在這里記錄日志或嘗試恢復 // ... // 返回EXCEPTION_EXECUTE_HANDLER會讓程序調用ExitProcess通常我們讓默認的CRT處理或彈框 return EXCEPTION_CONTINUE_SEARCH; } BOOL CMyBrowserApp::InitInstance() { // ... 其他初始化 ::SetUnhandledExceptionFilter(MyUnhandledExceptionFilter); // ... }2. 生成MiniDump文件你需要鏈接DbgHelp.lib并調用MiniDumpWriteDump函數(shù)。#include DbgHelp.h #pragma comment(lib, DbgHelp.lib) void GenerateMiniDump(struct _EXCEPTION_POINTERS* pExceptionInfo) { TCHAR szDumpPath[MAX_PATH]; GetModuleFileName(NULL, szDumpPath, MAX_PATH); PathRemoveFileSpec(szDumpPath); // 去掉文件名得到目錄 PathAppend(szDumpPath, _T(CrashDumps)); CreateDirectory(szDumpPath, NULL); // 創(chuàng)建崩潰轉儲目錄 SYSTEMTIME st; GetLocalTime(st); TCHAR szFileName[MAX_PATH]; _stprintf_s(szFileName, _T(%s\\BrowserCrash_%04d%02d%02d_%02d%02d%02d.dmp), szDumpPath, st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond); HANDLE hDumpFile CreateFile(szFileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (hDumpFile ! INVALID_HANDLE_VALUE) { MINIDUMP_EXCEPTION_INFORMATION dumpInfo; dumpInfo.ThreadId GetCurrentThreadId(); dumpInfo.ExceptionPointers pExceptionInfo; dumpInfo.ClientPointers TRUE; // 生成包含完整內存、句柄、線程等信息的MiniDump便于事后分析 MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hDumpFile, (MINIDUMP_TYPE)(MiniDumpWithDataSegs | MiniDumpWithHandleData | MiniDumpWithUnloadedModules | MiniDumpWithFullMemoryInfo | MiniDumpWithThreadInfo), dumpInfo, NULL, NULL); CloseHandle(hDumpFile); } }注意事項生成完整內存轉儲MiniDumpWithFullMemory文件會非常大但信息最全。在生產環(huán)境中可以根據需要選擇適當?shù)腗INIDUMP_TYPE。分析Dump文件需要使用WinDbg或Visual Studio并加載與你編譯環(huán)境匹配的符號文件.pdb。4.2 腳本與本地代碼交互這是瀏覽器控件最強大的功能之一。你可以通過IDispatch接口向網頁腳本暴露一個本地對象通常是一個COM對象實現(xiàn)JavaScript調用C函數(shù)。1. 創(chuàng)建可腳本化的COM對象使用ATL或純COM創(chuàng)建一個實現(xiàn)IDispatch接口的COM對象。假設我們創(chuàng)建一個名為HostObject的對象它有一個方法ShowMessage。// 使用ATL簡化假設有類CHostObject STDMETHODIMP CHostObject::ShowMessage(BSTR bstrMsg) { CString strMsg(bstrMsg); AfxMessageBox(strMsg); return S_OK; }2. 將對象暴露給網頁在CHtmlViewEx::OnDocumentComplete中當文檔加載完成時獲取文檔的IHTMLDocument2接口并將我們的對象設置為外部對象。void CHtmlViewEx::OnDocumentComplete(LPCTSTR lpszURL) { CHtmlView::OnDocumentComplete(lpszURL); LPDISPATCH pDisp GetHtmlDocument(); if (pDisp) { IHTMLDocument2* pDoc NULL; if (SUCCEEDED(pDisp-QueryInterface(IID_IHTMLDocument2, (void**)pDoc))) { // 創(chuàng)建我們的HostObject實例 CComPtrIHostObject spHostObj; if (SUCCEEDED(spHostObj.CoCreateInstance(__uuidof(HostObject)))) { // 設置為window.external對象傳統(tǒng)方式IE支持 VARIANT var; var.vt VT_DISPATCH; var.pdispVal spHostObj; pDoc-SetProperty(CComBSTR(external), var); // 或者更現(xiàn)代的方式是注入到window對象的一個屬性中 IDispatchEx* pDispEx NULL; if (SUCCEEDED(pDoc-QueryInterface(IID_IDispatchEx, (void**)pDispEx))) { DISPID dispid; if (SUCCEEDED(pDispEx-GetDispID(CComBSTR(LmyHost), fdexNameEnsure, dispid))) { DISPPARAMS params {0}; VARIANT varResult; varResult.vt VT_DISPATCH; varResult.pdispVal spHostObj; pDispEx-InvokeEx(dispid, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYPUT, params, varResult, NULL, NULL); } pDispEx-Release(); } } pDoc-Release(); } pDisp-Release(); } }現(xiàn)在網頁中的JavaScript就可以通過window.external.ShowMessage(Hello)或window.myHost.ShowMessage(Hello)來調用本地代碼了。安全警告無限制地暴露本地接口給網頁是極度危險的。務必對傳入的參數(shù)進行嚴格的驗證和清理避免腳本注入攻擊。最好只暴露必要的、功能受限的接口。4.3 多進程與沙箱隔離的思考原生的WebBrowser控件運行在宿主進程內。這意味著一個標簽頁的崩潰例如一個錯誤的ActiveX插件可能導致整個瀏覽器進程崩潰。對于追求穩(wěn)定性的多頁瀏覽器這是一個嚴重缺陷。進階思路進程外激活Out-of-Process Activation你可以通過COM的CoCreateInstance并指定CLSCTX_LOCAL_SERVER嘗試將WebBrowser控件創(chuàng)建在一個獨立的進程中即啟動一個iexplore.exe的實例進行嵌入。但這非常復雜需要處理大量的進程間通信IPC并且失去了對控件深度的控制。更現(xiàn)實的方案基于現(xiàn)有內核封裝這也是為什么現(xiàn)代瀏覽器包括使用CEF或WebView2的應用都采用多進程架構。對于VC項目如果你需要現(xiàn)代Web標準支持和穩(wěn)定性強烈建議直接使用CEF或WebView2。它們封裝了Chromium內核天然支持多進程、沙箱、現(xiàn)代Web API并提供了C接口。你的VC項目將從“實現(xiàn)瀏覽器外殼”轉變?yōu)椤凹蔀g覽器內核”將精力集中在業(yè)務邏輯而非底層渲染引擎的穩(wěn)定性上。5. 常見問題排查與調試技巧5.1 運行時庫缺失與版本沖突問題程序在開發(fā)機運行正??截惖狡渌娔X提示“找不到msvcp140.dll”或“應用程序無法正常啟動(0xc000007b)”。排查確認編譯選項檢查項目屬性中“C/C - 代碼生成 - 運行時庫”的設置。如果是/MD或/MDd目標機器需要安裝對應版本的VC Redistributable。檢查依賴使用Dependency Walker或Visual Studio自帶的dumpbin /dependents your.exe命令查看exe依賴的DLL。確保所有msvcp*,vcruntime*,ucrtbase*等DLL在目標機器上存在且版本匹配。統(tǒng)一部署對于/MD編譯的程序在安裝包中捆綁對應版本的VC_redist.x64.exe或x86并靜默安裝/install /quiet /norestart。技巧在Debug版本中可以故意使用/MDd這樣在缺少Debug版運行庫的機器上會立即報錯避免將Debug版本誤當成Release版本發(fā)布。5.2 WebBrowser控件白屏或導航失敗問題瀏覽器控件顯示空白或導航時沒有任何反應。排查檢查URL格式確保傳遞給Navigate2的URL是完整的包含協(xié)議頭http://或https://。對于本地文件使用file://協(xié)議。檢查網絡和代理WebBrowser控件使用系統(tǒng)IE的代理設置。如果機器處于需要代理的網絡環(huán)境控件可能無法連接??梢酝ㄟ^IWebBrowser2的put_Silent屬性設置為VARIANT_TRUE來抑制腳本錯誤彈窗但不會解決網絡問題。兼容性模式某些網站可能需要特定的文檔模式。你可以嘗試通過注冊表或組策略設置IE的兼容性視圖或者在代碼中通過發(fā)送WM_SETTINGCHANGE消息來刷新設置但這通常影響整個系統(tǒng)。ActiveX過濾與安全設置檢查IE的Internet選項中的安全設置確保ActiveX控件和插件已啟用。過高的安全級別可能阻止控件運行。5.3 腳本錯誤與崩潰問題訪問某些網頁時頻繁彈出腳本錯誤對話框甚至導致程序崩潰。處理禁用腳本錯誤提示在CHtmlViewEx初始化時獲取IWebBrowser2接口并設置Silent屬性。IWebBrowser2* pBrowser GetIWebBrowser2(); if (pBrowser) { VARIANT_BOOL varSilent VARIANT_TRUE; pBrowser-put_Silent(varSilent); }異常捕獲如4.1節(jié)所述設置全局異常過濾器生成Dump文件。這是定位崩潰點的最關鍵手段。啟用腳本調試開發(fā)時在IE設置中啟用腳本調試Internet選項 - 高級 - 禁用腳本調試(Internet Explorer) 取消勾選。這樣當腳本錯誤發(fā)生時會啟動Visual Studio進行調試。但這需要安裝VS且對最終用戶不適用。5.4 內存泄漏排查瀏覽器控件和COM對象容易導致內存泄漏。工具Visual Studio 內存診斷工具在Debug模式下運行退出時在輸出窗口查看是否有檢測到的內存塊泄漏。CRT調試堆在stdafx.h開頭定義#define _CRTDBG_MAP_ALLOC并包含crtdbg.h。在程序退出前調用_CrtDumpMemoryLeaks()。COM對象泄漏更棘手。確保每個通過QueryInterface獲得的接口指針在不再使用時都調用Release()。使用CComPtr、CComQIPtr等ATL智能指針可以極大減少此類錯誤。一個典型場景在事件處理函數(shù)中獲取了文檔接口IHTMLDocument2使用完后忘記Release。務必成對調用AddRef/Release或使用智能指針管理生命周期。5.5 快捷鍵與焦點管理混亂問題自定義的快捷鍵如CtrlT有時不生效或者焦點在地址欄和網頁之間切換時行為異常。解決焦點判斷在PreTranslateMessage中精確判斷當前焦點所在的窗口。使用::GetFocus()獲取焦點窗口句柄再用CWnd::FromHandle轉換為CWnd指針通過GetParent()或GetOwner()判斷其所屬關系。加速器表優(yōu)先級確保主框架的加速器表m_hAccelTable已正確加載。TranslateAccelerator應在PreTranslateMessage中盡早調用。瀏覽器控件自身快捷鍵記住WebBrowser控件會吞噬很多快捷鍵。如果你的框架快捷鍵與瀏覽器沖突如CtrlF你可能需要子類化瀏覽器控件的窗口過程GetWindowLongPtr/SetWindowLongPtrwithGWLP_WNDPROC來攔截特定消息但這屬于高級技巧需謹慎使用。通過這個項目的實踐你收獲的將不僅僅是一個可運行的多頁瀏覽器。你深入了MFC的窗口管理、消息機制實踐了COM客戶端編程處理了復雜的異步事件和資源管理并觸及了桌面應用部署、調試和穩(wěn)定性保障的諸多核心議題。雖然技術棧略顯“傳統(tǒng)”但其蘊含的Windows桌面開發(fā)精髓至今仍在許多工業(yè)軟件、專業(yè)工具中發(fā)揮著重要作用。當你下次再遇到VC運行庫問題或者需要調試一個復雜的ActiveX控件時這段經歷將成為你最寶貴的經驗。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
综合网久久| 亚洲 欧美 91| 精品免费成人久久| 欧美在线官网| 国产精品激情久久久久久久| 欧美超碰人妻97| 抽插无码高清一区| 国产精品日本无码A片| 青青草白白色| 99免费视频| 亚洲欧美综合区自拍另类| 亚州图片第一页| 91老司机在线视频免费观看 | 99天天超碰| 人妻中文字幕日韩电影| 绯色一区二区三区不卡少妇 | 亚洲清纯综合| 日韩电影天堂视频一区二区| 婷婷中文字幕| 在线综合网| 夜夜免费视频| 自拍盗摄一区| 色色婷| 亚洲日韩美国人妻| 欧美男人天堂| 夜夜夜爽www精品视频| 天天色怡春院| 97超碰天天爱天天爱| 婷婷六月色| 日本熟女免费視颖| 久久久久免费看少妇A片特黄| 欧美亚洲韩国视频十五区| 97综合在线观看| 免费一级视频特黄色大片| 亚洲春色欧美激情自拍| 夜夜夜久久| 公司1区2区3区精产精| 麻豆影音天美视频| 欧美日韩亚洲高清不卡一区二区三区| 久99视频| 99超级碰免费视频| 91狠| 久久理论字幕视频| www鬼畜国产男人的天堂| 五月婷婷激情综合| 国产呦精品一区二区三区下载| 久久透逼视频| 欧美不卡在线一区二区| 精品一区二区三区免费古装毛片香港三级日本三级人妇 | 大香蕉丝袜一级片| 人人插人人搞人人操| 亚洲一曲日韩精品| 久久亚州精品成人Av无| 91人妻最真实刺激绿帽| 免费?级毛片无码?∨蜜芽试看| 精品九区| 欧美亚洲今日在线| 久久产精品一区二区三区电影| 欧美激情专区| 床戏久久久av一区二区麻豆| 久草综合网| 日韩欧美麻豆 | 欧美性爱精品一区二区| 色香色欲天天综合网天天来吧| 亚洲综合另类小说色区亚洲成av人片在www| 欧美日本成人一区二区| 久久久久免费看少妇A片特黄| 无码黑人精品一区二区三区三| 高清无码在线播放网站| 日韩不卡毛片Av免费高清| 日亚韩精品视频二区三| 99精品网| 欧美久久婷| 伊人久久婷婷| 色噜噜国产在线| 99精品网站| 校园春色欧美色图| 欧美激情久久久久| 久草精品在线| 九九九精品| av网页一区二区三区| 午夜啪| gogogo免费高清看中国国语| 91社操逼| 色婷婷六月| 91大胆欧美| 亚洲 中文 女同| 午夜啊啊啊| 99最新日韩偷拍视频| 91国产丝袜白虎| 欧美日韩大香蕉| 黄色小视频日本txt| 97干在线| 青青草视频导航官网| 综合网亚洲1| 91激情| av在线一区二区三区| 中文字幕 国产区| 国产精品91一样| 亚洲综合影片| 97干在线视频| 亚洲电影中字一区二区| 天天操女人| 男人的亚洲天堂| 夜夜高潮夜夜爽夜夜爱爱一区| 国产视频一区二区三区在线免费观看| 熟女精品一区二区三区| 九九九九一级| 国产精品国产精品国产| 色九月婷婷| 99re不伦| 97免费在线观看| 中文字幕一二区二三区人妻专区| 免费观看啪视频| 一区二区三区蜜桃成人撸久久东京热| 99久草| 综合操逼| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 婷婷伊人綜合中文字幕| 亚洲骚男同com| 欧美一区二区三区互相| 亚洲乱色视频一区、二区在线| 脫衣舞一区二区三区| 激情五月天网站| 99热99re6国产在线播放| 97资源视频| 午夜免费视频1000| 久久精品一区二区三区蜜桃臀| 久久性爱视频99| 久久婷婷五月综合| 国产精品午夜福利| 国产女生在线| 久久无码精品| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 亚洲在钱| 亚州免费啪啪视频| 天天干夜夜肏| 天天操夜夜嗨| 欧美 传媒 麻豆 日韩 偷拍| a片久久久久久久久久久久| 在线 制服丝袜中出 人妻| 国产精品69久久久久孕妇欧美| av天堂电影网| 久操 高清| 欧州一区二区三区四区| 99热网站| 另类亚洲一区二区三区| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 内射夫妻三片| 欧美综合制服在线| 国产精品熟女九色九色蜜臀| 97色操| 五月丁香激情综合网| 青青草乱入乱欲视频在线观看| 亚欧毛片基地国产毛片基地| 久久中文字幕人妻熟av女蜜柚| 十八禁啪啪视频| 美腿丝袜高跟网免费视频免费视频| 一起草三级AV电影在线观看 | 亚洲av国产av综合av卡| 涩涩久久精品| 992这里有精品| 88xx成人精品视频| 97超碰影音| 99热在线播放| 黄色在线网站| 欧美性爱超碰97| 免费一级欧美片片线观看| 91天堂| 日韩99999色| 中文乱码字字幕在线第5页| 超碰调教97| 人人看人人插| 天美传媒av 在线| 亚洲综合精品国产一区| 91美女中出| 宅男午夜在线视频| 91麻豆天美国产欧美高潮| 在线中文字幕视频| 尤物网址| 久久久亚洲精品电影免费看| 九九九九九九视频| 亚洲人体视频在线观看| 九久9热| 日本 成 人 小说 电影 一区二区| 欧美亚综合色图| 青草精品视频一日本久久久久网站| 欧美性91| 麻豆天美国美国产AV| 操淫穴亚洲五月丁香| 伊人色综合网电影| 97超碰天天爱天天爱| 黑人粗大V S日韩女优视频| 色5月婷婷| JuliaAnnXXX888| 日韩熟女三十乱伦| www.婷婷五月天| 97少妇人妻中文字幕久久| 欧美性爱中文字幕无线码| 亚洲射综合网| .精品人妻一区二区三| 情色av电影| 亚洲欧美999| 精品久久久久久亚洲| 极品肉射| 精品国产99| 欧美黄色片在线播放| 禁十八久久| 99久久精品无码一区二区毛片免费| 天天透伊人| 91免费看一区二区三区| 在线情色电影 91大| 91干熟女| 久久在线观看免费视频| 九九九九九用不成了| 在线a v| 欧美综合传媒| 欧美日韩香蕉| 亚洲?V高清一区二区三区尤物| 精品四五区| 久久久亚洲熟妇熟女| 又大又长又爽| 亚洲乱熟女一区二区三区大香蕉| 伊人超碰97| 婷婷精品国产一区二区三区日韩| 亚洲五码一区二区三区| 老司机福利青青草| 天天综合,91入口| 六月激情网| 日韩欧美大力操| 成人小电影网站tex| 人人超碰在线观看黄| 亚洲性爱无码乱伦av| 男人午夜天堂| 97视频免费播放| 国产超碰在线一区| 欧美色偷拍 | 神马久久中文字幕| 国产女人高潮视频| 国产成人网站在线观看| 免费强奸av| 黄色激情电影在线观看| 日日爱99| se吧提供国产乱老熟视频胖女人| 91色婷婷综合久久中文字幕二区| 亚洲熟妇综合久久久久久| 九九精品美女高溯喷水 | 园内精品自拍视频在线播放| 日本性爱欧美性爱| 久久天天艹| 天天射天天操天天干天天吃2018| 一区二区三区一亚洲中文字幕、综合区灬 | 2019精品国产无码成人| 久久无码一区二区二三区性色| 97超碰碰| 影音先锋少妇| 在线观看av区| 激激五月| 伊人991| 欧美亚洲激情一二三| 午夜毛片高清免费不卡| 白嫩白嫩的午夜九久久久久久久久久久久成人剧场 | 精品性爱一二三区| 久9视频| 麻豆天美久久91| 骚乳在线| 青青草依人大香蕉| 亚洲国产一级黄色视频| 免費黃色視頻觀看一| 亚洲激情在线| 色情亚洲日本成人| 亚洲综合在线91| 草草草视频在线免费看| 丁香五月社区| 亚洲一二三精品久久网| 丰满人妻一区二区中文| 日本大香蕉综合网| 很很热性爱视频| 熟女人妇一区二区三区| 色精品极品| 欧美成人国产精品| 国产兽交视频在线播放| 日韩成人电影AV| 撸撸成人在线视频| 欧美色图片| 色噜噜狠狠色综合日日| 中文欧丝袜诱惑| 欧美草草高清日韩视频| 精品少妇人妻av久久免费| 天天干2019| 天天欧美97| 国产精品无码在线| 国产人人干| 国产精品一区av在线| 97亚洲国产影视| 欧美高清16| 精品国产肉丝袜在线拍国语| 东京热不卡视频| 国产探花精品在线| 熟女露脸激情自拍视频| 美国精品国产精品| 91丝袜熟女| 亚洲欧美综合区自拍另类| 国产成人资源| 人妻夜夜爽天天爽三区麻豆AV网站| 精品毛片久久久精品毛片| 亚洲 图片 欧美 色图| 天天欲望网| 九九热精品在线| 强乱老妇中文字幕| 亚洲欧美大| 97超碰超碰| 插入综合网| 国产精品午夜AV完会免费| 91干熟女| 亚洲av综合伊人久久| 亚州综合AⅤ| 超碰99热| 在线综合 亚洲 欧美中文字幕| 精品乱码久久久久| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 伊人网在线观看| 蜜乳AV一区二区三区四| 亚洲丝袜少妇在线| 四虎视频在线观看| 国产一级片| 五月天久久综合网| 熟妇无码视频三区| 久久久久9999妇女| 涩五月婷婷| 国内精品久久人妻性色av| 欧美专区17页| 91挑色欧美| 日本三级久| 中文字幕在线观看二区三区| 天天伊人| 国内毛片四区| 黑人粗大V S日韩女优视频| 亚洲美女精品| 久热99999| 99热99色| 国产超碰在线| 国产一区二区啪啪视频| 性爱乱伦一区| 人妻系列无码专区中文有码| 国产一级137片内射麻豆| 亚洲高清综合网| 欧美色图校园春色| 亚洲色天堂九9| 国产白丝在线| 东京热大香焦| 玖玖资源视频一区二区三区| 校园春色中文字幕AV| 啊啊好多水| 国产视频一区二区在线观看| 中文字幕天天天天天| 国产女上位好爽在线| 国产剧情一区在线观看| 男人天堂.AB| 日本有码久久| 亚洲美女 晚间男人天堂 | 国产美女激情| 久久久内射良家| 综合情欲网| 高清国产av无码| 综合久| 夜夜一区二区| 欧美性爱一区| 91网站18禁| 中日韩免费看男女操逼大全| 国产无码高清操逼视频| 免费精品福利在线观看| 国产一区二区三区中文字幕| 精品国产网站| 肥佬影院91| 久久久99免费| 丁香六月婷婷久久综合| 日本成熟少妇A∨网站| 亚洲另类天堂| 国产一级做a爰大片免费久久| 久久九九一区二区三区成人| 国产400孕妇孕交群| 国语国产操逼伊人AV网| 97精品国产精品免费观看| 亚洲色电影在线| 久久久久久AⅤ无码免费肉站| 欧美成人亚洲精品| 成全动漫视频观看免费下载| 另类av天堂| 婷婷超| 久9爱经典视频| 亚洲情色五月天| 国产精品老熟女一区二区| 99热这里是精品| 亚洲日韩少妇一道本视频| 超碰在线91| 操B在线观看| 97蜜桃综合| 91美女视频电影| 日韩成人私密一级精品av| 国产精品久久久久无码A√| 国产999精品久久久| 国产精品区在线12p| 日韩免费中文字幕视频| 快灬快灬 一下爽蜜桃在线观看 | 欧美极品美女aaaaaa级黄片| 精品无码一区二区三区色欲| 另类在线| 亚洲成成熟女人综合一区二区| 大香蕉专区| 天天干一区二区| 大香蕉伊人75| 色色色色网站| 亚洲天堂电影网99999| 精品久久人妻成人网| av久日| 在线欧美69V免费观看视频| 综合网久久| 久操网无码在线| 西西美女视频网| 精品中文字幕第一页| 日韩中文字幕宗合在线| 我要看免费韩日黄片| 久久午夜神马| 国产人伦精品一区二区三区 | 国产情侣自拍在线播放| 热热色综合网| 中文字幕老熟妇黄色视频| 澳门色噜噜色噜噜色噜噜色噜噜色噜噜| jizzjizz欧美| 97久久国产| 久偷拍| 国产福利小视频高清在线观看| 青青草中文字幕| 久久有碼| 99综合视频| 国内精品a| 职场同事知名国产国产精品久久欧美日韩| 日本欧美国内在线| 91狠狠综合| 久久天堂网| 青青草吊丝| 精品人妻中文字幕4399| 特色a在线上| 91女网站| 国模限制级电影| 欧美在线视频99| 五月天色色网站| 97色婷| 色色激情五月天| 亚洲中文字幕日产无码久久| 大香樵伊人网| 久久久亚洲精品电影免费看| 国产欧美精品日韩区二区麻豆天美| 自拍大香蕉乱插| 六月激情网| 天天综合精品| 久久久99999久网站| 国产麻豆一区二三区| 强奸熟女一区二区三区| 国产精品日日摸天天碰| 亚洲欧美人妻| 操逼啊啊啊91| 日本亚洲vr欧美不卡高清专区| 日韩精品高清资源在线| av久日| 亚洲激情综合另类| 午夜亚洲国产理论秋霞| 91一区二区| 国产丰满少妇久久久精品影院| 99色婷婷中文字幕乱色| 91色射| 强奸乱伦 亚洲一区| 国产美女高潮叫床视频| 亚洲 中文 女同| 日韩八十路老熟女| 国产a片操逼| 国产乱人妻精品入口| 天天综合网~91综合网| 久久的免费性爱视频| 色综合久| 国产蜜臀在线| 双插性欧美一二三区| 中文字幕少妇色| 91天天爽| JIZZJIZZ国产精品喷水| 啊灬啊灬啊灬啊灬高潮奶出了免费视 | 野狼福利社区| 亚洲精品 大香蕉| 偷窥自拍A片| 99视频只有精品| 91 丝袜在线| 99久热精品99re6热| 天天拍天| 日日超碰亚洲| 精品国产肉丝袜在线拍国语| 日韩pv中文| 天天综合有色网| 久久影视二区三区行押| 天天看天天日天天操| 岛国色情视频在线观看| 在线 制服丝袜中出 人妻| 超碰超碰95| 婷婷香网站| 天天色,天天干,天天干| 操人无码| 久肏视频字幕| A级片日韩欧美国产欧美视频精选观看 | 欧美黑人精品一区二区| 日韩欧美女优电影| 欧美97免费| 性久久| 欧美性,色九九| 九久久九九久视频| 强奸a片网| 天天享受天天看| 超碰在线一区二区三区| 人妻久久久久久| 欧美综合色图网| 中文字幕黄色片| 少妇高潮九九九九九九九| 一本大道不卡一二三区| 久久女同性恋一二区| 三级精品三级在线观看| 91熟女综合| 国产日韩区| 青青草国产一区二区三区| 精品日韩中文在线| 天堂涩涩| 五月天综合在线| 天天射日日干| 熟女欧美日韩综合婷婷| 亚洲Av无码成人精品国产| 麻豆黄站| 伊人影院在线理论播放| 懂色中文一区二区三区| 日韩欧美中文字亚洲慕| 国产不卡片| AAAA欧美日韩| 亚洲激情色片 | renqi久久久久久久久久久久| 色色97爱| 天天激色| 天天透伊人| 人妻偷拍一区二区三区| 亚洲 欧美 日本 国内 首页| 夜夜操天| 一级性爱aaaa| 亚洲婷婷丁香在线| 欧美精品欧美精品系列| 日本有码影片下载| 俺去俺来也在线www| 中文有码9| 大香蕉伊在线久草麻豆天堂故事| 麻豆国产96在线| 91AV入口| 日韩成人高清一区二区| 超碰超碰超碰超碰的大鸡吧操黑丝袜 | 88在线一区二区三区| 91精品电影18| 99久久精品无码一区二区| 老熟女综合| 亚洲日精品| 欧美亚洲清纯| 久久久月天| 久久久精品中文字幕麻豆| 天天综合精品| 日本日日色视频| 日韩国产品视频中文字| 国产精品交换一区二区| av天天在线观看| 久久激情综合| 玖玖在线视频| 多乙久久久久久| 国产一区二区三区导航| 久久激情亚洲精品无码?V| 国产成人自拍视频视频| 国产精品久久久久无码A√| 伦激情人妻另类人妻| 国产女乱淫真高清免费视频| 乱伦av麻豆| 90后性网国产欧美| 六月丁香网| 午夜欧美神马久久久久| 久久久成人精品| 好爽免费视频,| 无码操逼天堂| 欧美成人A天堂片在线观看| 亚洲 欧美 偷拍 唯美| 国产精品一区二区三区,亚洲综合| 日本一区二区三区午夜观看| 91人妻Pr| 国产久久男人天堂| 久久久久久久97| 欧美片第一页| 噜噜噜狠狠色综合| 亚热日本熟女| 蜜臀在线视频| 激情啪啪拍91| 欧美爆操91| 91欧美网| 婷婷视频在线免费观看| 色性欧美| 欧美图片校园春色| 永久免费av无码网站国产app| 天天干人人干天天日97| 久久午夜伦| 人妻素股| 久久鲁干| AV天黑人| 天天草夜夜草高潮片| 久久久久久性爱片| 99中文字幕| 国产激情片在线观看| 亚洲情色一区二区三区| 99热在线观看| 97亚洲综合在线| 欧美一级黄片免费播放| 亚洲男人天堂2013| 蜜乳成人AV| 九一亚洲国产免费| 无码外流操逼视频| 曰本精品久久久| 91肉片| 色综合潮| 色欲日韩欧美在线一区| 国产精品午夜精品| 九九RE视频在线精品| 亚洲一区中文字幕| 日韩偷拍色图| 26uuu偷拍亚洲欧洲综合| 国产偷仑| 操婷婷逼| 最新av中文字幕高清| 97 九色| 老熟妇一区二区三区…| 亚洲不卡一| 亚洲 欧美都市激情| 欧美精品二区视频在线| 啊啊啊啊在线播放| 天天操女人| 日本精品网站在线中文| 任你干在线视频| 久操综合在线| 久久精品国产72国产精品福利| 成人小说视频在线精品欧美| 九九九综合精品| 亚洲第一狼人丝袜美女另类| 欧美翘臀视频网站一区二区三区| 国产又大又粗又色生活片亚洲国产精品成人久久久综合免费 | 97日视频| 亚洲图片 91| 精品中文字幕一区二区| 另类欧美色| 91无摭挡| 九九九九一级| 青青色综合| 精品区9| 天堂中文日本在线观看| 26UUU欧美日本| 外国91| 亚洲最大AV网| 岛国片国产成人亚洲播放| 欧美在线电影| 亚洲情色在线| 插老姨肥穴| 91女人的网站| 亚洲 欧美 另类 日韩 人妻一区| 日日干夜夜骑| 清柠毛片| 久96热在线观看视频| 五月婷婷激情网| 五月天激情小说| 97干天天| 女人18精品一区二区三区| 日日躁天天躁狠狠躁| 男人的天堂网页| 99久在线精品99re8a| 日韩免费高清大片在线| 熟女这里只有精品6| 欧美日韩大陆黑人少妇99| 99re在线| 亚洲一二三| 性色av蜜臀av色欲aV| 精品丰满熟妇人妻一区| 欧美在线官网| 国产三级在线现体验区| 97国产综合欧美| 久久色AV线| 国产一区二区三区久久久精品| 在线观看岛国有码| 欧美综合区| 欧美综合1性辶| 亚洲日本韩国极品一区二区| 亚洲av综合色区图片亚洲| 亚洲高清少妇| 中文字幕在线播放2中文字幕在线观看2| 国产97亚洲| 色一射色一射| 国产黄片在线免费观看| 国内毛片四区| 色噜噜人妻丝袜AV资源| 日韩精品亚洲专区在线影视| 亚洲激情视频| 日韩精品大香蕉伊人在线| 久久怡红院| 久草尤物| 中文字幕av一区二区三区人妻少妇 | 91色综合激情| 亚洲操人| 牛牛操视频逼| 亚洲图片小说欧洲| 裸体1区| 色婷婷丁香五月| 91在线视频观看国产| 综合色91| 九九热只有精品| 97国产天堂岛| 99热网站| 草草影院日本第一页| 亚洲成成熟女人综合一区二区| 亚洲熟女乱熟乱熟妇综合网二区| 丁香六月啪| 91人人| 国产97/欧美| 久久久久9| 五月天丁香欧洲日韩| 精品一区二区成人| 日韩免费在线视频观看| 青青草在线视频播放器| 狠狠做深爱婷婷久久二区| 99re在线观看| 蜜乳性色无码专日粉嫩骚逼AV| 久久线上视频免费看| 亚洲熟久久| 91亚洲欧美色图| 日本色婷婷| 再深点灬舒服灬太大了好硬好爽| 岛国大片国产| 1级黄色夫妻对换性交免费看| 男人成人黄色视频在线观看免费下载| 先锋精品av色鲁| 国产精品爽爽va在线观看98| 中文字幕99999| 美女91AV| 精品9999| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 成·人免费午夜在线观看| 欧美午夜熟妇黑人精品91| 精品中文日韩字幕视频| 无码视频一区二区| 亚洲色图20p| 97国产超湿| 盗摄 精品 另类 一区| 欧美经典一区二区三区| 国产A v无码专区| 精品欧美А∨无码黑人大荫蒂| 正在播放国产精品一区| 青青青国产手线观看视频2| 亚洲欧洲无码bt精品合集| 色牛aV| 粉嫩av久久一区二区三区| 亚洲āv网址在线观看| 亚洲高清视频在线免费观看| 青青草国产欧美非洲黑人| 五十路一区无码| 亚洲熟女综合网| av影片在线观看不卡| 欧美亚洲天堂| 在线观看一级α片刺激高潮视频| 国产乱子伦久久精品综合一区二区三| 超碰97COm中文| 粉嫩av一区二区三区天美传媒| 高颜值美女口爆高潮浪叫| 天天日天天干天天摸天天操| 在线视频资源| 欧美大片91| 欧美18老人禁| 国产一级不卡在线观看| A片 AV一级在线播放观看免费 | 性色国产东北露脸精品视频| 吉川爱美亚洲二区在线 | 国产一区二区二区按摩精品啪视频| 成人九九| WWW操逼| 操比国产| 青青草日本无码| 美腿丝袜偷拍亚洲欧美| 韩国嫰模上门援交视频| 精品日韩产品在线,日韩在线不卡视频,欧美日韩免费专区/久, | 综合一区中亚洲国产成人综合精品 | 亚洲AV不卡在线观看| 亚州黄站| 被窝影院午夜看片无码| 黄色AAAAA欧美| 四虎影院成年人片| 色综合久| 国产传媒1234区| 欧美一区二区三熟女剧情| 99热这里只有精品18| 人人做,人人操,人人摸| 日韩av不卡在线观看| 亚洲影视综合网| 密臀在线免费观看| 久9综合在线| 91精品微拍福利| www九九热| 97精品97久久| 91人妻人人澡人人爽人人精品| 日韩性爱网址| 久久av网| 成年无码动漫av片无尽在线 | 91熟女.com| 国产 日韩 欧美一区| 日本色色色色色视频| 内射日韩大臀美女| 日韩欧美久久婷婷网站| 蜜屁av| 嗯啊抽插大香蕉网页| 欧美最婬乱婬爆婬性视频 | 91精品久久久久久77777| 欧美一区二区三区大综合| avav青青草久久夜| 日韩亚洲中文有码视频| 日本天天人人狠狠在线日美女| 日本久久久精品电影| 五月婷婷丁香六月丁香| 日韩草久视频| 中文字幕国产| 日本成人电影资源网| 九九综合久久| 国产a级精品| 中文字幕精品码亚洲| 岛国激情视频在线观看| 任我爽视频在线观看| 九九碰九九爱97超| 激情综合色| 蜜臀久久久99久久久久 | 国产亚洲精品美女久久久久久2021| 五月丁香影视| 欧美草草高清日韩视频| av无码精品久久久久| 东北老女人的激情视频| 日韩欧美亚洲自拍偷拍| 久久超碰爱| 亚洲高清综合网| 99色天堂| 久久风骚城市人| 欧亚在线视频| 欧美九一精品久久久熟妇| 户外裸露刺激视频第一区| 狠色婷婷久久一区二区三区_| AⅤ片水多多| 91欧美偷拍| 亚洲91在线| 午夜电影在线观看无码专区| 91爱看| 国产树林里野战在线看| 天堂精品一区| 嗯啊不要啊在线 | 天综合网| 99re这里只有| www.天天干| 999久久芭蕾| 国模吧 一区二区三区| 天天色怡春院| 51一区二区三区| 超碰碰97资源站| 超碰资源亚洲97| 中文字幕日韩电影人妻| 男人网站婷婷| 少妇滛荡视频| 婷婷丁香六月| 亚洲图片欧美色| 欧美大香蕉在线观看| 国产女s强制榨精视频| juliaann丝袜大战黑鬼| 国产99久久99热这里只有精品15 | 强乱老妇中文字幕| 亚州色交| 免费一级黄色录像影片| 免费国产| 日本不卡三级网在线播放| 日本精品网站在线中文| 国产美女高潮视频| 97精品国产97久久久久久免费| 自拍偷拍 日韩欧美| 亚洲图片 激情小说| 国产动漫操逼视频| 日本人妻最新在线中| 国产情色在线| 婷婷激情五月| 成人 日本A片无码8888| 久热这里只有精品9| 麻豆成人av| 久久夜黄色无码A级大片| 伊人91| 精品国产乱码久久久久久影片| 久操操AV电影| 黄页| 日韩图区| 蜜桃久久久久久| 俺去俺来也在线www| 伊人一级免费黄片| 拍拍拍拍大尺度黄色三级片拍拍拍拍拍照 | 日本九九久久99播| 亚洲国产精品成人无码久久久| 无码人妻一区二区三区四区老鸭窝| 国内操逼视频二区| 开心五月婷婷激情| 欧美黄片欧美黄片xxx| 大JI巴好深好爽又大又粗视频| 任我爽在线视频免费观看| 小草精彩毛片| 久久人妻视频网| 午夜a成v人电影| 色噜噜狠狠色综无码久久合欧美| 欧洲精品久久| 搡老女人老妇女老妇老熟女怎么读| 超碰在线欧美性爱激情| 丰满人妻-区二区三区免费看 | 老熟女乱伦一区| 啊啊啊无码| 国产麻豆91欧美一区二区久久婷婷国产精品 | 激情五月婷| 91人妻中文| 女人与公拘交酡2020视频| 青青草福利视频| 天美传媒精品久久视频| 亚洲区限制级 99| 久久久久久久久久久久黄色| 淫妻综合网| 免费看欧美美女黄色大片| 国产强奸乱伦xd| 亚洲成a人v欧美综合天堂下载| 大屁股熟女一区二区三区| 美腿丝袜高跟网免费视频免费视频| 欧美三级一级| 91爱综合| 国产精品久久发布| 北条麻妃性愛视频| 天天综合网国产| 麻豆视频test| 国产久久一区二区午夜| 久久久艹艹艹| caorenqi shipin| 狠狠综合网| 黄色av一区二区在线| 特级丰满少妇一级AAAA爱毛片| 久久性生大片免费观看性| 人人操人人精品影片| 白丝在线一区| 亚洲色综网| 东北操逼| 我想要啊 啊 啊| 亚洲色图欧美色18直播在线| 精品超碰色| 丰满人妻-区二区三区免费看| 国产综合久| 国产精品com| 亚州性9| 亚洲国产精品无码AV久久| 91久久九九精品国产综合| 天天干天天舔| 日韩无码黄色片| 日本成人电影资源网| 成人日本视频人妻在线| 国内毛片无码一级毛片| 人妻系列无码专区中文有码| 99这里只有精品国产| 国产亚洲禁久一区二区| 中文字幕在线日亚洲9| www.天天干| 好看的91视频| 91超碰碰在线| 亚欧美综合网| 日语五十路和六十路亚洲国产精品| 亚洲精品乱码线路中文字幕| 天天做日日爱夜夜爽| 九月婷婷久久| 2019AV天堂| 亚洲天堂久| 国产精品剧情| 岛国片在线视频网站| 国产精品欧美日韩久久| 精品久久久久久亚洲| 人妻精品一区二区全免费| 超碰久久草| 玖玖无码超碰| 超碰欧美| 成人美女av| 色综合中文字幕不卡| 日韩丝袜高跟制服在线观看| 亚州高清AV| 日韩免费高清大片在线| 国产高清成人mv在线观看| 亚洲色图久久成人| 日夜干射色啊| 久久久久久十| 亚洲导航深夜福利| 丁香六月婷婷久久综合| 亚洲中文电影| 91美女片在线| 成人一级性爱| 久久25| 亚洲综合另类色图| 在线日韩日本亚洲国产| 国产树林里野战在线看| 少妇一区二区三区在线观看| 国产青青美女玩逼视频| 久久夜夜| 中日亚韩免费视频| 男人天堂久久精品| 99最新日韩偷拍视频| 国产激情视频一区区三区| 亚洲欧洲综合视频在线| 九七毛片九九毛片| 极品国产内射| 久久女人一区二区三区| 一区二区视频你懂的| 久久久人妻| 五月婷婷六月天| 在线五区| 7777奇米影视久久| 激激五月| 91n欧美| A 天堂在线观看视频| 啊啊啊好大好深| 秋霞蝌科网日本一区| 丝袜综合色图| 日本视频在线中文字幕| 欧美日韩操逼动图| 96爱综合| 另类亚洲一区二区三区| 91麻豆天美国产欧美日| 91岛国动作片| 日本精品不卡一二三区| 亚洲色悠悠久久88| 精品人妻一区二区视频| 九九久久首页| 久久春色| 一二三啪啪专区| 久操免费视频| 亚洲精品a人片在线观看视| 搞中出视频在线观看| 成人情色综合网| 波多野结衣一级视频| 欧美三级一级| 91av熟女人妻| 久久9精品视频| 亚洲春色欧美激情自拍| 日本不卡三级网在线播放| 精品久| 日韩内射视频| 国产午夜福利专区综合| 欧美在线l亚洲| 国产精品一级毛片不卡视| 啊操爽品善一区二区三区| 思思热免费在线视频| AV男人天堂网| 超碰成人国产| 男人天堂新在线| 五月丁香六月激情| 91bbbbbb| 丝袜制服字幕在线| 国产中文字幕在线点播| 欧美韩国你懂得在线 | 中文字幕123| 日日干夜夜骑| 日韩AV一区二区三区四四| 日本二三四区| 一品道视频一区二区三区| 亚洲春色欧美激情自拍| 青青草大香蕉在线视频| 国产精品麻豆视频网站| 在线啊啊啊| 国产又粗又又黄又猛| 亚洲欧美综合| 欧美熟妇视频| 久操网无码在线| 亚洲精品骚逼| 美女一区二区国产精品| 夜夜爽夜夜高潮夜夜爽| 日本91白丝| 强奸乱伦免费网站| 欧美 日韩第一性色| 久久久久九九九| 欧美综合天堂| 色偷偷色偷偷欧美日韩| 人妻aa| 人爽不卡视频| surenchaopeng| 欧美刺激色黄片免费看| 亚洲欧美另类图片| 激情四射五月天| 涩五月婷婷| 日韩极品无码B| 亚州 综合 色图| 五月天激情小说网| 欧美精品23| 2020天天色综合| 国产成人主播| 大香蕉免费乱伦视频| 91老熟妇| 快播久久人人aV| 欧美韩国你懂得在线 | 美女尤物福利视频| 人妻少妇精品视频一区二区三区| 又摸又舔在线观看网站| 九九激情网| 色五天伊人| 丝袜视频网国产90| 一区=区三区视频| 日韩性爱免费观看视频| 天堂综合网| 国产精品电影推荐| 黑操B| 久久久18| 国模艳艳啪啪一区| 欧美亚洲情色| 婷婷丁香人妻| 综合久久99亚洲人妻中文在线| 人妻久久久久久久久久久久久久久| 美女国产一区二区久久| 亚洲日本激情| 美女网站91| 水滴偷拍| 久久久久久久久9| 秋霞一区二区三区四区五区六区七区| 日韩久久三区| 中文字幕 国产区| 日本性爰一道本| 成人五月天丁香激情综合| 亚洲天天精品| 五十路熟女工口| 天美国产精品| 久草网站免费在线观看| 三级激情网站| 中文人妻av高清一区| 99999国产| 亚洲天堂男| 蜜臀久久99精品久久久久久酒店| 欧美日本天堂| 蜜臀久久99精品久久综合| 亚洲图片偷拍视频区| 强奸乱伦麻豆| 亚一综合久久久久久久久久| 粉嫩av平台| 自拍偷拍 日韩欧美| 东北毛片| 欧美精品宗合| 久久中文字幕不卡人妻| a男人的天堂久久一级A毛片| 综合夜夜| 国产精品久久| 97天天摸天天爽| 亚洲天堂男人天堂网| 国产免费内射视频| 色97干| 欧美色综合网|