国产成人欧美一区二区三区vr_久久国产精品人人爽人人爽_国产精品永久免费播放_肉欲啪啪a∨无码精品一区二区_国产超短裙jk丝袜在线_亚洲AV片高清资源在线观看_国模无码一区二区三区久久_国产成年人未进视频_中文字幕无码精品夜_一区二区三区在线视频免费看_亚洲成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
返回資訊列表
2024年最新色情网站在线观看| 天天爽入口| 狠狠操,使劲操| 亚洲清纯唯美| 国产婷婷一区| 欧美有码亚洲中文字幕一区二区三区四区 | 99热官网| 无码人妻精品一区二区中文| 久久啊啊| 久久久精选| 亚洲图片欧美制度| 国产欧美日韩在线观看麻豆传媒公司| 国产精品一级特黄aaa大片在线观看| 少妇精品| 最新AV在线| 日韩三级在线观看mp4| 午夜男女爽爽爽在线视频| 懂色av一区二区三区天美传媒| www.高清无码诱惑一区.com | 人妻丰满熟妇一区二区三| 精品9999| 肥臀熟女一区二区三区视频| 激情啪啪视频| 国产乱码久久| 麻豆影音天美视频| 丰满人妻-区二区三区免费| 国产成人亚洲精品无码古代早漏男| 中文字幕在线观看丝袜| 国产成人精品网站| 唯美清纯 妖精视频| 国精综合一二三区影视| 色欲久久99精品久久| 综合久久99亚洲人妻中文在线| 啪啪视频mP4| 欧美亚洲日本激情在线| 亚洲AV操| 五月丁香网站| 春色校园综合网| 99精品网| 天天干天天做| 一区二区激情国产熟女| 国产欧美第五页| 丁香婷婷大香蕉| 五月婷婷色| J?P?NESEHD熟女熟妇伦| heyZO天然素人无码AⅤ专区| 男人的天堂va在线| 精品乱码久久久久| 中文乱码99| 精品人妻二区三区| 啊啊啊啊啊好大好舒服想要| 欧美色997| 久久熟女人| www.色婷婷| 天天日天天舔| 免费观看有码高清视频| 91亚洲黑人| 夂久色| 国产三级中文有码在线视频| 国产综合网站在线播放 | n1038 一二三区| 99国产天美| 97玖玖人妻| 天天天乱色综合全| 97超碰影音| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 97天天插| 夜夜欢天天干| 国产精品人妻一区二区| 亚洲精品国产熟女久久久久久| 色翁荡息又大又硬又粗又爽| 久久精品国产亚洲AV片多多| 国产免费一区二区在线A片视频| 中文操逼字幕| 国产免费小视频| 淫荡网址| 伊人久久综合影院| 亚洲一区日韩| 精品人妻一区二区三区-国产精品| 久久曰曰| 外站AV在线| 97干色| 国产一区二区三区视频在线看| 人人插人人摸人人| 欧美 青青草| 色拍偷亚洲| 久久大黄片| 无码精品久久| 5252色欧美在线男人的天堂| 久草免费在线视频| 国模精品娜娜一二三区| 有码色中文字幕在线观看| 超碰日韩美妻| 美女裸体无遮挡永久免费观看网站 | 亚洲视频,小说| 欧洲与亚洲欧美精品中文字幕| 欧美综合色综合| 四虎精品亚洲| 欧美日韩一区二区三区四区蜜桃| 婷婷激情四射| 欧美人人天天网| 亚洲国产97在线精品一区| 国产激情在线| 女同在线视频一区| 中文字幕精品码亚洲| 国产亚洲日韩在线三区黑人| 国产久久日韩网站导航| 色97干| 亚洲动态色图| 欧美激情中文字幕另类小说| 伊人国产视频| 国产精品丝袜在线| 国语av最新自产拍在线观看| 激情亚洲天堂| 天美传媒AV在线播放| 无码av永久免费专区网站| 嗯啊不要啊在线| 老鸭窝日丰县女人| av午夜玫瑰| 99色日| 日日日日做夜夜夜夜做无码97| 日韩免费在线观看不卡| 人妻在线臀日韩| 东京热毛片调教| 欧美精品一区二区少妇免费A片 | 后入内射蜜桃臀| 色色九区| 日韩欧美视频青青| 中国人高清www色视频免费| 欧美十八禁在线看| 欧美色另类| 人妻中文在线| 天天精品| 人人澡综合涩| 中国农村熟妇毛片视频| 中文字幕视频2区| 欧美色图 色综合图| 操逼网站地址| 亚洲欧美成人网站AAA| 99免费在线视频| 99热在线只有精品| 97人人草| 俄罗斯及免费在线看| 99操| 天天干嫩逼网| 极品综合| 这里只有精品97| 欧美精品久久| 欧美性爱中文字幕无线码| 又黄又爽在线观看视频| 欧美日韩性爱电影在线| 欧美 日韩 另类 亚洲| 蜜乳视频网站| 日本精品一区二区三| 学生妹天天看| 熟妇人妻丰满久久久久久久无码| 后入美女国产| 日韩人妻有码免费视频| 啊啊啊轻点在线观看| 人人透人人操| 嫩草在线视频| 日韩成人小视频| 久久不卡一区二区| 欧美人妻久久精品二区三区| 青青草色AV| 亚洲天堂7777| 亚洲乱妇p22| 久久久久久久久久久久久久久性生活视频 | 91亚洲人电影| 园内精品自拍视频在线播放| 国产视频97| 欧美色棕合| 免费观看国产不卡av| 五月激情小说| 国产97/欧美| 丰满人妻一区二区三区四| www.99色| 一级做受视频免费是看美女| 亚洲日本大香蕉1| 日本三级小说中文字幕| 色穴精品| 欧美一级黄片免费播放| 午夜人人操| 澳门色噜噜色噜噜色噜噜色噜噜色噜噜| www.97在线| 婷婷视频在线免费观看| 国产操逼视频在线观看| V A在线| 九九九只有精品| 啊啊啊啊啊啊在线看| 欧洲亚洲国产综合在线| 97超碰超碰| 丝袜翘臀后入欧美校园亚洲自拍另类小说一区中文字幕少妇诱惑 | 蜜臀99久久国产| 美性中文综合网| 91精品电影18| 能看的av| 日韩另类色图| 亚洲色图91欧美日韩| 91free福利| 无码高清专| 熟妇xxxxx性春色| 欧美se综合| 精品一区二区2| 91蜜桃传媒精品久久久一区二区| 女人香蕉久久毛毛片精品| 青青草成人视频在线观看二区| 男人天堂站| 九九久久首页| 日韩人妻网站| 日韩中文字幕宗合在线| 91N综合网在线| 欧洲亚洲综合| 九九九成人| 亚欧美无遮挡| 欧亚日韩中文在线| 日韩精品国产一区二区| 天天日天天干天天整| 去干网最新版| 99中出在线| 97 亚洲 日韩 欧美 在线| 激情综合五月天| 91碰碰| 四虎AV在线观看| 午夜激情床戏激情| 高潮嗯啊性感美女久久久| 97色97好| 神马久久免费电影观看| 青娱乐啪啪视频| 成年人黄色视频免费| 超碰在线人人射| 久久国内| 久草视频制服诱惑| 日韩精品第3页| 久久精品日韩专区免费观看| 强乱老妇中文字幕| 超碰精品日韩欧美国产| www.久久最新地址| 99热这里| 亚洲综合 欧美| 久久香蕉国产线看观看亚洲女人 | 日韩99精品视频综合区| 日韩人妻 中文字幕| 99热99色| 欧美在线色| 久久久无码精品人妻二区| 亚州色综合| ..日韩av毛片精品久久久| 亚洲av无线观看| 久久久精品日本一道| 色诱avtt| 78精品在线| 免费αV在线视频| 国产一区二区精品久久99| 亚洲天天在线| 一区,二区,三区网站| 五月婷婷hd| 久久国产精品视频| 四虎国产精品永久在线囯在线| 乱欲一区二区| 天天综合网久久ww| 亚洲黑人在线| 天堂8在线新版官网| 色色色色色色色色综合| а√天堂资源官网在线资源| 人人色人人操在线| 任你干在线视频| 大象AV在线| 日韩不卡a级视频专区| 小草三级久久观看| 国产99999| 1禁看欧美黄片免费看| 午夜激情成人在线观看| 后入福利视频| 欧美性暴力猛交XXXX | 久久久久久久久久久久黄色| 中文字幕制服诱惑| 九九久久99| 乱色老一区二区三区的观看方式| 最新亚洲人成网站在线影院| 无码99| 久久久久九九九九九| 欧美 精品国产制服第一页 | 日韩欧视频| A V视频日本| 久久精品一区| se吧提供91精品国产91久久久久久 | 1769精品一区二区三区| 超碰久在线天天做| 夜夜天天噜狠狠爱2021| 在线亚洲精品久久久| 91人妻人人澡人人爽人人精品| 九九这里只有精品| 青青青在线高清视频在线一二三四区| 久久色情| 久久综合97| AA丁香综合激情| 夜夜嗨一区| 国产精品久久久久久久黄无码| 久久国产精品,久久国产| 亚洲资源站| 国产亚洲一黄| 俄罗斯及免费在线看| 欧美日韩夜夜| 人妻精品视频一区二区三区| 欧美最婬乱婬爆婬性视频 | 国产精品丝袜久久亚洲不卡| 色香色欲天天综合网天天来吧| 久久精品视| 在线中文字幕极品av| 色哟哟av网址| 99无码视频| 九九九热| 日日做夜狠狠爱欧美黑人| 欧美探花网| wuyechaopeng| 久久久久成人蜜桃精品| 久久国产免费激情视频| 中文字幕精品专区搜索结果91| 亚洲欧美一区二区三区一猛片| 欧美日本视频一区| 欧美美女啪啪视频| 操逼不卡中文字幕| 热的中文 热的有码 热的国产| 性感女人网页在线观看视频| 成全动漫视频观看免费下载| 亚洲污污网站| 色婷视频| 99re免费视频精品全部| 疯操AV| 久久99热这里只频精品6学生| 蜜桃久久一区二区| 九九九九九九九九九九九九九九九女| 五月婷婷激情| 粉嫩不卡一区二区性爱| 91 丝袜在线播放| 天堂涩涩| 色婷婷蜜臀av| a在线观看| 成人26uuu| www.久久超碰| 黑人与人妻| 日本久久99| 精品国产一区二区三区四区在线看| 亚洲熟妇AV日韩熟妇在线| 亚洲少妇色| 国产偷拍自拍在线视频| 在线人成亚洲视频免费观看| 一本久道久久综合狠狠爱一密臀精| 热久日综合| 久久熟女人| 亚卅熟女乱色| 草草网站影院白丝内射| 日本一区二区三区午夜观看| 亚洲高清欧美总合| 欧美日韩亚洲国产中文永久天天看| WWW4虎| www.人人cao| 日韩无码精品综合久久| 91欧美亚洲| 精品一区二区久久| 欧美 亚洲 另类 综合| 欧美美女自慰一区二区三区| av中文在线| 人人插人人摸人人| 国产精品国产自产高清AV | 婷婷亚洲五月***久久| 欧美在线视频99| 久久超碰天天| 五月天欧美色图| 一区中文字幕二区日韩| 天天操女人| 能看的av| 婷婷五月在线视频| 丁香激情五月| 91狠狠色丁香婷婷综合久久精品| 久热大香蕉| 精品一啪| 韩国一级做A片免费的| 国产日韩区| 日B操| 国产精品久久久无码aV去| 99re在线| av网站免费线看| 青娱乐999| 精品人妻一区二区三区日产乱码| 久久超碰97| 麻豆视频一区二区| 欧美性生活男人的天堂| 欧美v亚洲v综合v国产v妖精| www…国产操逼| 日本精品无码三级网站| 国产高清免费不卡av| 91丨豆花丨熟女| 人人贴人人摸| 亚洲无码久久久久久久| 九九热超碰| 1024久久高清视频| 殴美综合色88| 九七毛片九九毛片| AV在线播放网址| 国产精品伦理| 十八禁视频一区二区| 天天懆天天日| 国产精品青草综合久久| 91久精品| 女人的天堂大香蕉网| 足交视频老司机| 伊人国产AV| 99人妻| 大屁股人妻女教师撅着屁股| 色噜噜人妻丝袜a∨先锋影| 天堂8在线新版官网| 91校园春色长篇| 蜜桃臀av一区二区| 抽插亚洲无码| www.伪伪| 91久久国产综合久久| 97超碰色屌| 亚洲色天堂九9| 精品人妻一区二区三区免费视频| 黑人娇小av在线播放| 国产第12页| 97最新在线播放视频| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 天天影视色香欲综合网小说| 国产高清成人传媒影视| 嗯啊啊啊轻点视频 | 国产亚洲美日韩Aⅴ中文字幕无码成人| 亚洲aV无码成人在线观看| 精彩视频日韩| 九九热只有精品| 中国AV美女| 婷婷五月天综合网| 天天综合91入口| 欧美一区二区三区互相| 丁香五月电影| 97干综合网| 综合亚洲欧美精品日韩?v| 熟女被操视频网址| 熟妇人妻一区二区三在线| 91国模| 97国产高清视频在线观看| 91蜜臀在线久久久久| 韩日自拍| 国产成人亚洲精品无码古代早漏男| 五月婷在线| 天天综合站| 久久黄色视频一区二区三区 | 日本一级特级毛片视频| www.色五月| 狠狠操狠狠燥| 超碰成人最新最好看| 成人久久无码www| 欧美色图综合网| 在线性黄高清免费视频| 亚洲十八禁止| 亚洲精品国产熟女久久久久久| 黑丝91视频| 99re9| 久久伊人最新网址视频| 九九九九一区| 强奸乱伦Av网| 日本最新免费韩国1区2区视频播放| 天天日夜干| 99热18| 97精品一区| 特级丰满少妇一级AAAA爱毛片| 久久久久久波多野吉衣高潮| 一级岛国大片| 欧美日本久久精品一区| 日本一区二区三区午夜观看| 日韩精品三区四区| 男插女青青影院| 大香蕉伊人一区在线观看| 综合网欧美| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 精品国产国产AV| 无码区蜜乳| 男人把坤坤插入女人的下体| 一级特级aaaa毛片免费观看| 久久成人东京热人妻| 日本岛国黄色网址| 日本久久超碰| 蜜桃视频精品一区二区三区| 日韩黄片影院| 精品一区二区三区四区外站| www. 男人天堂成人在线| 亚洲九九九| 99999精品视频| 日韩操逼性鲍| 亚洲偷91色| 亚洲AV无码国产精品久久久久 | 在线观看国产黄色| 一本色道久久综合精品婷婷| 91人人爽人人爽人人人,gav福利视频导航,日韩欧美亚洲国产字幕四区 | 伊人久久88国产女| 韩日色费| 久久久天美| AA丁香综合激情| av爱爱爱| 视频二区美腿制服人妻欧美| 狠狠躁AV| 日本成人电影资源网| 97久久超碰亚洲| 人妻天天操天天爽视频免费| 免费少妇一区二区| 九九热精品视频六| 热久久九九热| 丁香婷婷久久 | 色妹子A V| 天天色黄色影院天天操| 老熟女天天操| 人人搡人人肉久久精品| 丁香五月激情网| 四虎国产精品永久地址入口| 欧美偷拍| 欧美熟女丝袜| 丝袜喷水在线| 丁香激情网| 日韩性爱1级片视频| 啊啊啊啊好多水| 色超碰综合| 九九热免费国产视频婷婷伊人| 日本一区视频在线观看| 三四中文字幕| 国产午夜在线观看视频| 欧美在线观看综合国产| 13小男生GAY自慰脱裤子| 97视频www| 欧美精品成人亚洲| 色五月激情网| 日本成人电影资源网| 极品销魂美女一区二区| 亚洲AV不卡在线观看| 亚洲最大的黄色电影网站。| 日日干夜夜干| 2018色综合天天操| 少妇高潮对白在线观看| 蜜乳AV.COM| 26uuu最新| 大色综合| 精品国产乱码久久久久久网站入口| 精品人妻伦一区二区三区久久| 久久伊人在线五区| 青青草原狼av| 一本道综合色图| 蜜乳AV色欲AVAV无码| 国产精品亚洲天堂网址| 色色99| 国产乱码久久久| 色www精品视频在线观看| 精品美女久久久久| 97久久国产精品女不卡| 久久久久久裸体| 精品v1区| 91色五月俺来也| 97干在线看| 91欧美高清| 五月综合色| 99精品网| 欧美日韩高潮喷水91| 啊视频在线| 日韩精品在线观看网站| 久久欧美性爱视频| av资源在线播放天堂| 老司机射| 九九黄色视频在线观看| 国产97色在线| 2020视频1区2区3区| 久久怡红院| 欧美操逼一二三区| 亚洲中文字幕有码视频一区二区三区| 射丝袜高跟鞋99| 五月婷婷hd| 日本精品性生活久久久| 69丨亚洲丨精品丨入口免费播放| 亚洲日本天堂| 午夜噜噜噜| 国产精品视频在线观看| 大香蕉久久| 久久精品国产亚洲AV清纯| 99精品国产户外露出| a男人的天堂久久一级A毛片| 免费观看国产不卡av| 国产色精品午夜大片| 精品亚洲国产成人AV制服丝袜| 开心五月婷婷激情| 人妻久热在线| 亚洲日韩乱码中文无码蜜桃臀网站 | 97超碰色屌| 劲爆欧美人妖三区91| 九九九九九九精品| 黄色无码高清黄色无码网站| 精品九九国产无码| 丁香五月电影| 精品人妻一区二区乱码一区二区| 骚日日av| 亚洲AV无码秘 蜜桃臀国精产品| 色翁荡息又大又硬又粗又爽| 亚洲黄色影视| 久久一二三四不卡 | 成人热久久精品| 日本久久久精品电影| 人妻丝袜美腿中文字幕| 人妻81p| 少妇一线天久久久久久| 国产妇女精品视频青青草| 啊啊啊啊好疼| 婷婷去俺也去六月色| 五月丁香久久| 99热国产| 国产精品爱欲| 色蜜AV| 97欧美色综合| 亚洲欧美色图小说| av天堂影视中文在字幕在线中文| 亚洲熟女一区| 国产精品久久aV| 九九色热| 国产精品一级二级在线| 午夜a成v人电影| 偷拍 精品另类 凸凹了四区| 任你干在线视频| 国产精品福利资源在线尤物| 欧美黄色片AAAAA| 亚洲综合小视频小说在线观看| 国内一级精品| 亚洲国产一区二区三区四区国产| 一区 欧美 日韩 麻豆| 777超碰| 亚洲色综合| 麻豆黄站| 亚洲精品国产专区在线观看| 91天美传媒精品| 日韩有码专区| 五月丁香婷婷啪啪| 天天搞欧美| 亚洲成人久久一区二区| 久操在97| 操逼天美3区| yazhousetuoumei| 麻豆久久精品亚洲精品88| www99热| 999热日韩精品| 亚洲国产一区二区三区四区国产| 天美一区在线| 日本一级二级三级网站| 天天看高清麻豆| 草莓精品视频在线免费观看| 久久综合中文国产| 天天干天天舔| 久操九九九九九九九九九九九九九九九九九九九九九九九九九九九九 | 91欧美色| 六六久久日韩不卡| 色图综合网| 日本熟妇熟色97一本在线观看| 好属操| 内射中出日韩在线观看视频| TS人妖另类精品视频系列| 99青草| 国语av狠狠色丁香婷婷综合激情| 超碰激情808| 成人精品久久久午夜福利| 人人操天天爽| 亚洲免费成人在线高清无码视频| 2017,超碰| 97色婷婷| 私人尤物在线精品不卡| 亚洲精品欧美专业| 日本国产欧美高清在线| 久久精品国产99久久,亚洲日韩久久日本一区一区三区 | 蜜桃视频精品一区二区三区| 欧美日韩性爱电影在线| 天天爱综合网| 99热思思| 91影库| 久久精品成人| 久久国色天香香蕉| 欧美黄色大片在线观看 | 偷拍盗拍亚洲色图图片 | 无码直播久久久| 熟女91网| 亚洲色人妻综合| 2018天天干在线视频| 久久精品操| 综精品久久久aaaa| 亚洲色图欧美视频| 肉动漫无遮挡h在线观看| 亚州熟妇精品| 6080yy午夜理论三级一区二区三区无码 | 国产 v乱码一区二| 84YTCOM性无码| 无毛精品| 伊人久久亚洲中文字幕| 日本欧美亚洲高清在线看| 狠日欧美| 日韩高清一二三| 日韩二级| 天天爽夜夜操| 嫩草影院在线观看精品 | 国产精选三级在线观看| 国产成人拍国产亚洲精品| 黄站在线免费观看| 亚洲永久AV无码精品秋霞| 国产成人+综合亚洲+天堂| av在线播放国产一区| 国内一级精品| 99久久9| 国内操逼视频二区| 欧美78p| 五月婷婷AV| 一级性爱啪啪视频| 91美女网站| 岛国天天午夜影院传媒网| 色 亚洲 91| 9999伦理视频| 玖玖97综合| 婷婷亚洲天堂| 中文字幕成人理论在线| 91人精品妻入口| 少妇久久久久久| 亚洲人妻爽爽爽| 91老熟女91老女人| 青青草狠狠撸| 偷拍在线观看视频| 日韩午夜国产| 97久久精品国产| 欧美少妇一区二区三区| 69精品少妇一区二区三区蜜桃| 精品区国产区一区二区三区| 国产高清26uuu| 一本色道久久天天射天天干| 青春草莓视频在线观看网址| 97久久国产| 五十路三区在线| 91制服丝袜中文字幕| 日韩精品午夜操呦呦不卡影院| 老鸭窝日丰县女人| 97久久天天综合色天天综合色电影| 久久久久久久久久黄色网| 亚洲色欲一区二区三区| 欧美狠狠弄| 九九成人精品| 欧美情色贴图| 国产成人精品午夜福利| 欧美中字不卡| 蜜桃香蕉久草精品在线| 青草伊人久久| 性欧美91| 中文字幕蜜乳av| 97超碰人人操人人操| 少妇一级无码精品| 91在线超高颜值国产| 日韩亚洲精品一区二区| 日本人人操人人操| 五月丁香成人网| 深夜啪啪啪视频免费| 97午夜剧场日韩| 亚洲色性情三级| 日本高清熟女久久一区| 91精品人妻五十路| 99re视频在线播放青草| 国产成人久久精品蜜臀| 高清国产无码av| 色嗨嗨在线| 午夜丁香| 国产久久视频| 97超碰免费生活| 又黄又硬又粗又长国产视频| 久久东京热久久| 久久成年片色大黄全免费网站| 国产日韩欧美操逼视频| 丁香五月综合| 一道本久久棕合爱| www.高清无码诱惑一区.com| 亚洲天天精品| 国产精品免费久久久久久久久久| 一级岛国大片| 国内自拍 日韩激情 99| 艳美熟妇先锋一二三区| 夜夜操中文字幕| 99999re| 日韩在线一区高清在线| 午夜男女爽爽爽在线视频| 日韩97视频!在线| 精品一区二区三区蜜桃臀www| 91女日逼| 乱伦a片视频| 狠狠干综合| 1024手机看片欧美日韩| 亚洲激情视频| 国人欧美精品一区二区| 精品人人| 久久日韩肥臀| 中文字幕一区二区三区高清| 女优视频第10页| 久久一区二区加油站| w w w.久久精品| 欧美性爱在线无码| 亚热日本熟女| 婷婷丁香激情| www.婷婷| 97国产精品久久久久| 久久国产AⅤ| 成人午夜无码视频| 蜜桃臀一区二区aV| 国产日产精品久久快鸭的功能介绍| 色五月首页| 欧美黑人91| 国产精品国产自产高清AV| 97精品国产97久久久久久| 青青草女人天天干| 国产精品人妻熟女aⅴ| 蜜色网色哟哟| 9Ⅰ超碰| www.超碰在线| 婷婷九月丁香| 亚洲国产成人精品无码专区| 中文字幕日韩精品一区二区三区| 欧美中文综合| 成人精品在线观看| 9久9久9久9久视频网站| 综合欧美日韩在线观看| 亚洲色图综合网| 日本欧美韩国国产在线| 吉田爱美AV在线| 亚洲欧美色图| 91女人的网站| www久久国产精品| 国产精品经典一卡久久久 | 欧美操逼熟女| 偷拍五区| 国产午夜激片Av毛片不卡| 超碰久在线天天做| 日本五十路熟女一区二区| 91丝袜在线视频| 国产91啪| 麻豆人妻偷人精品无码视频| 曰韩操B| 激情小说亚洲图片| 亚洲色图亚洲无码强奸乱伦 | 26uuu国产免费观看| 99热国产精品| 国产精品久久伊人| www.91视频网| 超碰97欧美在线| 日韩成人高清一区二区| 亚洲综合有玛| 中文色综合| 欧美 亚洲 91| 伊人久久大香大香线蕉中文| 无码二级三级| 欧美淫穴| 日韩成人精品| 久久精品视| 久久婷婷色| 嗯嗯啊啊操我| 日本一天色道久久久精品视频| 天天干干天天干干| 久久精品女同亚洲女同13| 精品久久99| 麻豆久久精品亚洲精品88| 嗯嗯啊啊用力视频免费| 人妻一区视频| 国产免费内射视频| 2025亚洲男人天堂| 日韩午夜精品一区二区三区电影| 另类图片五月天| 欧美色棕合| 亚洲导航深夜福利| 老熟乱一区二区三区四区| 夜夜操91744565| 大香网站| 中文字幕后石码四区五区| 久9久9精品| 亚洲色综合| 岛国黄片网站| 四虎影视国产精品| 女同性恋一区二区三区精品视频| 国产最新小视频在线播放下载| 蜜桃臀一区二区三区久久| 欧美成人9797| 播播亚洲小说亚洲| 亚洲天天操| 亚洲色情在线影视| 欧美黑人XXXⅩ高潮交| 人妻中文字幕精品无码| 亚洲欧美碰碰| 美日韩一二三区| 久久久蜜桃一区二区三区| 中文字幕国产| 青青在线视频日韩欧美| 亚洲丝袜制服国产91_国语字幕免费观看完整版下载第5集_ | www.狠狠干.coom| 日韩免费大片一级播放| 78久久| 久久精品一区二区三区蜜桃臀| 夜夜夜久久| www.人人cao| 精品中文字幕第一页| 日韩在线电影| 狠狠操狠狠燥| 97日视频| 中文字幕av色| 天天躁日日躁AAAXX| 中国国产精品一区视频| 91色交| 色色九区| 国内外激情在线| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 天天欧美色| 99久久综合网| 特级丰满少妇一级AAAA爱毛片| 日本黄大片在线观看视频| 午夜欧美精品久久久| 偷拍片久久| 日日橹狠狠爱欧美超碰| 亚洲国产综合久久久性感熟妇| 人人爱操| 国产精品亚洲免费| 欧美午夜一区二区三区| 日韩欧美aⅴ综合网站发布| 日韩一级久久毛片| 操国产高清| 丝袜美腿av女优在线| 欧美性夜| 日韩大香蕉AV影片| 国产97av| 高清无码91| 国际精品久久久| 九九九不卡| 欧美色交| 东京热av影院| 久久岛国| 久久这里只有精品9| 啊啊啊爽爽| 97日韩| 超碰免费97| 蜜臀一区二区三区在线| 国产免费一区2区3区| 狠狠爱综合网| 精品三级在线专区| 100啪啪视频大全| 日本欧美韩国国产在线| 岛国免费黄色网址| 激情小说成人日本无码一| 黄色电影观看久久9| 国语国产操逼伊人AV网| 丰满人妻一区二区三区大胸懂色 | 欧美性Fer办公室秘书| 夜色97| 成人草草视频| 96精品久久| 国产综合日韩伦理| 国产欧美精选激情视频| 操高情无码| 婷婷AV一区二区三区| 99久久婷婷| 久久99国产综合精品女同| 少妇同性| 国产后入清纯| 亚洲无码一区成人免费午夜| 熟女探花啪啪| 国产成人无码啪| 亚洲第一成人影院色播| 综合网欧美在线| 91新在线欧美| 蜜桃狠狠色伊人亚洲综合 | 久久一区二区高清免费| 色色色色电影网| 国内91熟女人妻丝袜天天精品视频在线| 国产欧美一区二区| 大香蕉之青青草原| juliaann丝袜| 岛国福利在线精品播放| 欧美强奸一区二区诱惑| 美女超碰978| 成人久久精品| 超碰美国| 日本 色 导航| 亚洲欧美精品一区天堂久久 | 国内伊人久久久久久网站视频| 性爱综合一区二区| 在线看免费无码AV天堂的| 亚洲AV乱码专区国产噜噜亚洲| 久久成人午夜狠狠| 日韩视频中文字幕| 91操人| 啊啊啊啊啊操我视频| 国产夫妻性生活视频| 日韩啊V| 国产又爽又黄| 亚洲永久AV无码精品秋霞| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 野狼激情网| 激情五月天校园春色网| 97视频在线免费观看| 国产小u女在线观看| 欧美一区二区三区大综合| 校园春色 亚洲| 中文字幕乱在线伦视频中文字幕乱码在线| 亚洲综合色网| 国产风韵犹存熟妇三区| 天堂69亚洲精品中文字| 俺去也婷婷| 亚洲少妇免费视频\| 13小男生GAY自慰脱裤子| 伊人激情| 欧美在线第五页| WWW啪啪的com| 国产白嫩精品久久| 日韩无码一区二区三区| 丰满的三级少妇欧美久久久| 九九九影院| 内射夫妻三片| 亚洲色偷偷色噜噜狠狠99网| 欧美成人精品一区二区男人蜜臀| 欧美日韩国产另类综合| 亚洲情色电影网| 91精品人妻一品二品三品| 亚洲蜜桃V妇女| 欧美影音在线| 91成人高清在线观看| 超碰久久中文| 好爽免费视频| 日韩成人精品中文字幕| 91精品国产长腿丝袜美女| 高清一区AV无码| 欧美综合色站| 成人精品久久久午夜福利| 久久天天摸| 久久国产精品m码| 岛国片在线观看视频亚洲| WWW美腿丝袜香蕉中文| 香蕉久久AⅤ...| 天天摸夜夜操视频| 美女视频尤物网在线看| 自拍欧美| 国产日产精品久久快鸭的功能介绍| 中文字幕一二三区| 国产福利一区二| 午夜欧美J进J出白浆流出久久久| 四虎精品永久在线播放| 一道本久久棕合爱| 婷婷超| 欧美狠狠弄| 国产黄色在线播放观看| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 99自拍B亚洲 | 日本精品一区二区中文字幕| 欧洲站一级二级三级h| 在线观看黄色电话| 国产农村妇女毛片精品久久| 激情小说五月天| 男人午夜天堂| 亚州人妻| 乱伦av.com| 9精品久久久久| 成年女人一区| 国产精品人人爽人人做可爱福利| 97在线观看免费视频l| AV无码久久久精品| 欧美热图99| 国产有码一区| 成人麻豆av电影网站| 本道在线| 久操综合在线| 日本人妻中文字幕 | 亚洲色诱惑| av中亚| 九九热精彩视频| 超碰精品在线| 熟妇乱伦一区二区| 青青草玖玖爱| 五月丁香久久| 成人av福利在线观看| 女上位精品在线| 欧美亚洲日韩人妻在线观看| av黄图片在线观看| 欧美亚州色的图| www.婷婷六月天| 高清无码在线播放网站| 33044男人的天堂深夜备| 欧美 亚洲 综合 制服| 岛国在线免费视频| 风韵犹存大大大大香蕉| 精品97精品97| 99色在线视频| 宅男影院久久久,99| 中文字幕视频二区| 久久久不卡区一区二区三区久久久| 综合欧美日本三级| a片在线播放| 国产精品对白自产拍| 欧美亚洲系列| 青娱乐国产剧情av一区| 大香蕉欧美日韩| 色色丁香| 亚洲小电影免费涩涩成人在线高清 | 夜夜欧美 | 72av视频| 老女人碰碰在线碰碰视频| 99热成人| Blackedraw视频一区二区| 日韩成人无码| 日日骚网站| 麻豆人妻偷人精品无码视频| 北京专精特新企业招聘信息| 黄片www.| 久久黄色性爱视频| 凹凸视频在线一区二区| 超碰 欧美| 校园春色亚洲无码| 日韩在线人妻网站| 亚洲不卡AV在线| 国产又色又爽又舒服的三级视频| 亚洲男人综合| 欧美性暴力| 天天久久久久久| 五月天加勒比啪| 欧美性爱一区| 欧美日韩资源在线| 嗯嗯啊在线视频| 亚洲图片偷拍视频区| 干干干天天| 久久 国产 无码| 婷婷色综合欧美日韩| 男人天堂2030| 九九九九热只有精品| 97久久国产亚洲精品超碰热| 妇人噜噜| 新97国产超碰| 性色国产东北露脸精品视频| 精品.99999| 久久大香蕉手机高清| 鲁鲁色综合网| 女优免费一区二区永久| 97精品综合久久| 岛国片在线观看视频亚洲| 97欧美性爱| 亚洲人妻中文高清| 91人妻素女| 亚洲精品人妻吞精av| 日人妻视频91| 日本色色色视频| 国产色精品午夜大片| 精品久久久久久中文| 啪啪视频亚洲第一| 欧美亚洲| 伊人黄色视频免费观看| 另类小色呦| 久久精品性| 98色网| 久久免费老司机精品| 亚洲男人的天堂一区二区| 一区二区三区四区姦女| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 久久精9| 九九九九免费视频|