日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满av-国产精品中文字幕免费观看-亚洲成人久久一区二区三区-国内少妇偷人精品视频无缓冲-一区二区国产精品日本一区二区三区在线网

ARTICLE DETAIL

資訊詳情

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

VS2010 下 CefSharp WinForms 嵌入與 JS 互調(diào)

VS2010 下 CefSharp WinForms 嵌入與 JS 互調(diào) 簡(jiǎn)介面向仍在使用 VS2010 與 .NET Framework 4.0 的 WinForm 開(kāi)發(fā)者這份示例工程演示如何借助 CefSharp.WinForms 49.0.1 把 Chromium 內(nèi)核嵌入桌面程序替代老舊的 WebBrowser 控件解決網(wǎng)頁(yè)兼容性與腳本交互能力不足的問(wèn)題屬于可直接上手的中初級(jí)實(shí)戰(zhàn)參考。壓縮包共 319 個(gè)文件、約 189.28MB其中 174 個(gè) pak 與 52 個(gè) dll 構(gòu)成 CEF 運(yùn)行時(shí)依賴與本地化資源另有 7 個(gè) cs 源文件、2 個(gè) csproj 工程及 xml、config、bin、exe 等配套項(xiàng)。代碼覆蓋 NuGet 引用配置、Cef.Initialize 初始化、ChromiumWebBrowser 控件創(chuàng)建、加載完成與狀態(tài)變更事件監(jiān)聽(tīng)、ExecuteScriptAsync 執(zhí)行腳本、CefSettings 定制如禁用 GPU 加速、設(shè)置緩存路徑以及退出時(shí)調(diào)用 Cef.Shutdown 釋放資源。工程可直接編譯運(yùn)行也可作為二次開(kāi)發(fā)骨架已有 3432 人學(xué)習(xí)下載適合需要快速驗(yàn)證內(nèi)嵌瀏覽器方案的 .NET 桌面開(kāi)發(fā)者參考。1. 從一次白屏說(shuō)起VS2010 .NET 4.0 下還能用的 CefSharp.WinForms 示例這份 C# WinForm CefSharp 示例代碼解決的是 VS2010 .NET 4.0 老項(xiàng)目里嵌一個(gè) Chromium 瀏覽器控件的剛需。前陣子維護(hù)一個(gè)模擬項(xiàng)目X客戶端只能跑在 .NET 4.0 上業(yè)務(wù)頁(yè)面已經(jīng)是現(xiàn)代前端構(gòu)建出來(lái)的WebBrowser 控件一打開(kāi)就腳本報(bào)錯(cuò)換成 CefSharp 又連續(xù)白屏。后來(lái)把版本對(duì)齊、初始化順序、輸出目錄和 x86/x64 這幾件事拆開(kāi)驗(yàn)證才整理出一套能編譯、能加載本地 HTML、能做 C# 與 JS 互調(diào)的最小骨架。它適合還在維護(hù)老 WinForm 客戶端、不能隨便升級(jí)框架的人也適合想先跑通 CefSharp 再疊業(yè)務(wù)邏輯的開(kāi)發(fā)者。下面按“選包、起工程、調(diào)生命周期、部署、排錯(cuò)”的順序拆開(kāi)講代碼按 VS2010 的 C# 4.0 語(yǔ)法寫(xiě)不依賴 async/await。2. 版本對(duì)齊先確認(rèn) CefSharp 包里有 net40再談 WinForm 嵌瀏覽器2.1 為什么 VS2010 下不能隨便拿最新 CefSharp 包VS2010 自帶的是 .NET 4.0 和 C# 4.0這兩個(gè)約束會(huì)同時(shí)卡住 CefSharp 的托管層和示例代碼。CefSharp 的托管程序集有目標(biāo)框架要求較新的包往往把 lib 目錄切到 net45、net452 甚至更高直接引用會(huì)提示程序集依賴不兼容C# 4.0 又不支持 async/await網(wǎng)上大量 CefSharp 示例是 C# 5 以后的寫(xiě)法復(fù)制進(jìn) VS2010 會(huì)直接編譯不過(guò)。另一個(gè)容易被忽略的是原生層CefSharp 依賴 libcef.dll、CefSharp.BrowserSubprocess.exe 和一整套 CEF 資源文件它們分 x86 和 x64項(xiàng)目平臺(tái)目標(biāo)設(shè)成 AnyCPU 時(shí)很容易把錯(cuò)誤架構(gòu)的原生 DLL 帶進(jìn)進(jìn)程。我一般選包時(shí)先做三件事解壓 nupkg看 lib 目錄下有沒(méi)有 net40 或 net4.0 文件夾看 nuspec 里對(duì) .NET Framework 的依賴再看 cef.redist.x86 / cef.redist.x64 包里是不是同時(shí)帶了托管 DLL 和原生文件。沒(méi)有 net40 目錄的包不要硬上換一個(gè)能對(duì)上的舊分支比后期改程序集綁定省事。版本號(hào)不必記直接看包內(nèi)目錄和 nuspec 最穩(wěn)。選好之后把 nupkg 當(dāng)壓縮包解壓手工引用 DLL比在 VS2010 里折騰老版本 NuGet 更可控。2.2 手工還原一個(gè)可編譯的工程骨架在 VS2010 里新建 Windows Forms Application目標(biāo)框架選 .NET Framework 4.0。進(jìn)配置管理器把平臺(tái)從 AnyCPU 改成 x86新建平臺(tái)時(shí)不要勾“創(chuàng)建解決方案的平臺(tái)”直接把當(dāng)前項(xiàng)目改成 x86。然后把 CefSharp 包里的 CefSharp.dll、CefSharp.Core.dll、CefSharp.WinForms.dll 加到引用引用屬性里的 Copy Local 設(shè)為 True。原生文件不通過(guò)引用走直接復(fù)制到項(xiàng)目下的 CefSharp 目錄再在項(xiàng)目里包含這些文件屬性設(shè)為“如果較新則復(fù)制”。!-- 項(xiàng)目文件里重點(diǎn)看這幾項(xiàng)等價(jià)于在 VS2010 屬性面板里設(shè)置 -- PropertyGroup TargetFrameworkVersionv4.0/TargetFrameworkVersion PlatformTargetx86/PlatformTarget Prefer32Bitfalse/Prefer32Bit /PropertyGroup這段配置的核心是 TargetFrameworkVersion 和 PlatformTarget。VS2010 的 WinForm 項(xiàng)目模板默認(rèn)可能是 AnyCPUCefSharp 在 64 位系統(tǒng)上會(huì)按進(jìn)程位數(shù)去找原生 DLL如果輸出目錄里只有 x86 的 libcef.dll就會(huì)出現(xiàn)進(jìn)程啟動(dòng)后白屏或直接退出。Prefer32Bit 是給后續(xù)高版本 MSBuild 看的VS2010 下主要靠 PlatformTarget 控制。平臺(tái)目標(biāo)定下來(lái)之后輸出目錄只放對(duì)應(yīng)架構(gòu)的 CEF 文件不要 x86 和 x64 混放混放時(shí)誰(shuí)先被加載看運(yùn)氣玄學(xué)問(wèn)題會(huì)很多。2.3 最小驗(yàn)證先加載 about:blank再加載本地 HTML工程骨架起來(lái)后不要急著接業(yè)務(wù)頁(yè)面。先寫(xiě)一個(gè)最小窗體在 Load 事件里動(dòng)態(tài)創(chuàng)建 ChromiumWebBrowser加載 about:blank確認(rèn)能出空白頁(yè)而不是白屏。這個(gè)步驟能過(guò)濾掉大部分原生 DLL 和子進(jìn)程路徑問(wèn)題。確認(rèn) about:blank 正常后再把 URL 換成 Application.StartupPath 下的 index.html。本地文件路徑用 file:/// 前綴反斜杠換成斜杠中文目錄先避開(kāi)。private void MainForm_Load(object sender, EventArgs e) { // 先加載 about:blank確認(rèn) CefSharp 原生層和子進(jìn)程都正常 var browser new ChromiumWebBrowser(about:blank); browser.Dock DockStyle.Fill; this.Controls.Add(browser); // 原生層確認(rèn)后再換成本地 HTML string htmlPath Application.StartupPath.Replace(\\, /) /index.html; browser.Load(file:/// htmlPath); }這段代碼沒(méi)有用設(shè)計(jì)器拖控件原因是 ChromiumWebBrowser 在設(shè)計(jì)時(shí)初始化會(huì)拉子進(jìn)程VS2010 設(shè)計(jì)器經(jīng)常直接崩。動(dòng)態(tài)創(chuàng)建放在 Form.Load 里設(shè)計(jì)器只看到普通窗體打開(kāi)設(shè)計(jì)器不會(huì)觸發(fā) Cef 初始化。Dock 設(shè)為 Fill 讓瀏覽器鋪滿窗體Load 方法傳 URL 即可。如果 about:blank 都白屏先別改代碼去輸出目錄檢查 libcef.dll、CefSharp.BrowserSubprocess.exe 和 locales 是否齊全再看項(xiàng)目平臺(tái)目標(biāo)和 DLL 架構(gòu)是否一致。3. 把瀏覽器控件用起來(lái)初始化順序、生命周期和 C# 與 JS 互調(diào)3.1 Cef.Initialize 和 Cef.Shutdown 的配對(duì)Cef.Initialize 建議放在 Program.Main 里、Application.Run 之前并且全進(jìn)程只調(diào)用一次。常見(jiàn)錯(cuò)誤是在窗體構(gòu)造函數(shù)里初始化每開(kāi)一個(gè)窗體調(diào)一次第二次就拋異常或者初始化放在 Load 里子進(jìn)程路徑還沒(méi)準(zhǔn)備好。初始化參數(shù)里 BrowserSubprocessPath 必須指向輸出目錄下的 CefSharp.BrowserSubprocess.exeCachePath 和 UserDataPath 指向有寫(xiě)權(quán)限的目錄。老項(xiàng)目裝在 Program Files 下時(shí)Application.StartupPath 往往不可寫(xiě)緩存會(huì)靜默失敗表現(xiàn)就是頁(yè)面加載一半或登錄態(tài)丟失。[STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); // 舊分支的 JS 綁定開(kāi)關(guān)必須在 Cef.Initialize 之前設(shè)置 CefSharpSettings.LegacyJavascriptBindingEnabled true; var settings new CefSettings(); settings.BrowserSubprocessPath Path.Combine(Application.StartupPath, CefSharp.BrowserSubprocess.exe); settings.CachePath Path.Combine(Application.StartupPath, Cache); settings.UserDataPath Path.Combine(Application.StartupPath, UserData); settings.Locale zh-CN; settings.LogSeverity LogSeverity.Info; settings.LogFile Path.Combine(Application.StartupPath, cef.log); try { Cef.Initialize(settings); } catch (Exception ex) { MessageBox.Show(Cef 初始化失敗 ex.Message); return; } Application.Run(new MainForm()); }參數(shù)里 BrowserSubprocessPath 是最容易漏的不設(shè)時(shí) CefSharp 會(huì)按默認(rèn)規(guī)則找子進(jìn)程部署目錄一變就找不到。CachePath 和 UserDataPath 分開(kāi)緩存和用戶數(shù)據(jù)不要塞進(jìn)只讀目錄。Locale 設(shè)成 zh-CN 對(duì)中文界面和輸入法更穩(wěn)。LogSeverity 和 LogFile 是排錯(cuò)用的白屏?xí)r先看 cef.log 里有沒(méi)有“failed to load libcef”或子進(jìn)程啟動(dòng)失敗。CefSharpSettings.LegacyJavascriptBindingEnabled 只對(duì)舊版 RegisterJsObject 生效新版綁定 API 不需要但老分支不設(shè)置會(huì)報(bào)對(duì)象未定義。3.2 ChromiumWebBrowser 的創(chuàng)建時(shí)機(jī)與釋放ChromiumWebBrowser 的創(chuàng)建放在窗體 Load 事件里比較穩(wěn)FormClosing 里先 Dispose 瀏覽器再 Cef.Shutdown。順序反了會(huì)出現(xiàn)關(guān)閉窗體后 CefSharp.BrowserSubprocess.exe 還在任務(wù)管理器里第二次打開(kāi)程序連不上子進(jìn)程。Dispose 之后把引用置空避免 FormClosing 被多次觸發(fā)時(shí)重復(fù)釋放。如果窗體里有多個(gè)瀏覽器實(shí)例每個(gè)實(shí)例都要 Dispose但 Cef.Shutdown 全進(jìn)程只調(diào)一次。private ChromiumWebBrowser browser; private void MainForm_Load(object sender, EventArgs e) { browser new ChromiumWebBrowser(about:blank); browser.Dock DockStyle.Fill; this.Controls.Add(browser); } private void MainForm_FormClosing(object sender, FormClosingEventArgs e) { if (browser ! null) { browser.Dispose(); browser null; } Cef.Shutdown(); }這段代碼的關(guān)鍵是生命周期配對(duì)。Load 里創(chuàng)建FormClosing 里釋放Cef.Shutdown 放在窗體關(guān)閉時(shí)而不是 Application.Exit 事件里避免窗體還沒(méi)釋放就先關(guān) Cef。Dock 設(shè)為 Fill 后不需要再調(diào) Anchor。如果窗體里還有其他控件建議給瀏覽器一個(gè) Panel 容器瀏覽器 Dock 到 Panel業(yè)務(wù)控件放在 Panel 外面后面換皮膚或加工具欄時(shí)不用改瀏覽器布局。3.3 JS 調(diào) C#RegisterJsObject 的綁定時(shí)機(jī)與命名舊分支常用 RegisterJsObject 把 C# 對(duì)象暴露給頁(yè)面。綁定要放在瀏覽器創(chuàng)建之后、頁(yè)面 Load 之前綁定太晚頁(yè)面腳本已經(jīng)執(zhí)行完window.bridge 就是 undefined。第三個(gè)參數(shù) camelCaseJavascriptNames 決定 C# 方法名是否轉(zhuǎn)成首字母小寫(xiě)傳 false 時(shí) JS 里保持 C# 原名傳 true 時(shí) GetVersion 變成 getVersion。這個(gè)參數(shù)和前端約定必須一致否則前端按小寫(xiě)調(diào)、后端按大寫(xiě)綁控制臺(tái)只會(huì)報(bào)未定義。public class JsBridge { public string GetVersion() { return 1.0; } public void Notify(string message) { // JS 調(diào)用可能不在 UI 線程更新控件前用 BeginInvoke } } private void MainForm_Load(object sender, EventArgs e) { browser new ChromiumWebBrowser(about:blank); browser.Dock DockStyle.Fill; this.Controls.Add(browser); // 第三個(gè)參數(shù) falseJS 里用 window.bridge.GetVersion() browser.RegisterJsObject(bridge, new JsBridge(), false); browser.Load(file:/// Application.StartupPath.Replace(\\, /) /index.html); }JsBridge 里的方法盡量簡(jiǎn)單參數(shù)用 string、int、bool 這類基礎(chǔ)類型復(fù)雜對(duì)象讓前端序列化成 JSON 字符串再傳減少綁定層序列化差異。Notify 里如果要更新 WinForm 控件不要直接改JS 調(diào)用線程不一定是 UI 線程用 BeginInvoke 包一層。注冊(cè)對(duì)象名不要用 window、document 這類保留字也不要和頁(yè)面已有全局變量重名重名時(shí)頁(yè)面自己的對(duì)象會(huì)被覆蓋排查起來(lái)很費(fèi)時(shí)間。3.4 C# 調(diào) JS不用 async/await 的 EvaluateScriptAsync 寫(xiě)法VS2010 的 C# 4.0 不支持 async/await但 EvaluateScriptAsync 返回的是 Task可以用 ContinueWith 接。回調(diào)里判斷 task.IsFaulted、task.IsCanceled再取 task.Result.Success 和 task.Result.Result。ContinueWith 的第二個(gè)參數(shù)傳 TaskScheduler.FromCurrentSynchronizationContext()讓回調(diào)回到 UI 線程避免在回調(diào)里直接操作控件時(shí)拋跨線程異常。這個(gè)寫(xiě)法比 Thread.Sleep 等頁(yè)面加載可靠得多。private void ReadDocumentTitle() { browser.EvaluateScriptAsync(document.title).ContinueWith(task { if (task.IsFaulted || task.IsCanceled) { return; } var response task.Result; if (response.Success) { MessageBox.Show(Convert.ToString(response.Result)); } }, TaskScheduler.FromCurrentSynchronizationContext()); }EvaluateScriptAsync 的參數(shù)是 JavaScript 表達(dá)式返回值會(huì)走 JSON 序列化字符串、數(shù)字、布爾值都能直接轉(zhuǎn)DOM 對(duì)象不要直接返回先轉(zhuǎn)成 JSON.stringify 再傳回來(lái)。ContinueWith 里不要假設(shè) task.Result 一定不為空腳本拋異常時(shí) Success 為 falseResult 可能是 null。需要連續(xù)調(diào)多個(gè)腳本時(shí)不要嵌套 ContinueWith容易把線程調(diào)度繞暈拆成多個(gè)方法按業(yè)務(wù)順序調(diào)或者在前端用一個(gè)初始化完成標(biāo)記C# 側(cè)只探這一個(gè)標(biāo)記。4. 部署不是復(fù)制一個(gè) exe輸出目錄、x86/x64 與 VC 運(yùn)行時(shí)的核對(duì)表4.1 輸出目錄該放哪些文件CefSharp 的部署目錄不是只有一個(gè) exe托管 DLL、原生 DLL、子進(jìn)程、資源文件、語(yǔ)言包都要在。不同分支文件名單會(huì)變最穩(wěn)的辦法是看 cef.redist 包里的 README 或示例輸出目錄把那一套整體復(fù)制過(guò)來(lái)再刪掉不需要的語(yǔ)言包。下面這張表是常見(jiàn)必須項(xiàng)用來(lái)核對(duì)有沒(méi)有漏不是固定清單。文件或目錄作用常見(jiàn)漏法CefSharp.dll托管公共接口只引用了 WinForms 包漏了公共接口CefSharp.Core.dll托管核心引用有輸出目錄沒(méi)有CefSharp.WinForms.dllWinForms 控件項(xiàng)目引用正常發(fā)布時(shí)漏復(fù)制CefSharp.BrowserSubprocess.exe瀏覽器子進(jìn)程沒(méi)設(shè) BrowserSubprocessPath或沒(méi)復(fù)制libcef.dllCEF 原生核心架構(gòu)不對(duì)或被殺軟隔離chrome_elf.dll加載與崩潰輔助只復(fù)制 libcef.dll漏了它icudtl.datICU 數(shù)據(jù)頁(yè)面中文亂碼或直接白屏natives_blob.bin、snapshot_blob.binV8 快照啟動(dòng)時(shí)報(bào)快照加載失敗locales 目錄語(yǔ)言包只放 en-US.pak中文環(huán)境異常swiftshader 或 d3dcompiler_47.dll軟件渲染與圖形依賴虛擬機(jī)或無(wú) GPU 環(huán)境黑屏核對(duì)時(shí)不要只看項(xiàng)目引用列表要看 bin 目錄實(shí)際輸出。VS2010 里非引用文件靠“復(fù)制到輸出目錄”屬性控制有時(shí)候文件在項(xiàng)目里屬性還是“不復(fù)制”調(diào)試時(shí)從 obj 目錄能跑發(fā)布就缺文件。建議在項(xiàng)目里建一個(gè) CefSharp 文件夾把原生文件全部放進(jìn)去屬性統(tǒng)一設(shè)成“如果較新則復(fù)制”發(fā)布時(shí)整目錄帶走。4.2 平臺(tái)目標(biāo)與原生 DLL 架構(gòu)AnyCPU 為什么容易翻車(chē)AnyCPU 在 64 位系統(tǒng)上默認(rèn)跑 64 位進(jìn)程但很多 CefSharp 包默認(rèn)帶的是 x86 原生文件進(jìn)程位數(shù)和 DLL 架構(gòu)對(duì)不上libcef.dll 加載失敗表現(xiàn)就是窗體出來(lái)但瀏覽器區(qū)域全白。反過(guò)來(lái)項(xiàng)目設(shè)了 x64輸出目錄卻是 x86 的 cef.redist也一樣白屏。排查時(shí)先看任務(wù)管理器里進(jìn)程有沒(méi)有“32 位”標(biāo)記再用 dumpbin 看 libcef.dll 的 machine 字段兩邊必須一致。:: 在 Visual Studio 命令提示符里執(zhí)行查看 libcef.dll 是 x86 還是 x64 dumpbin /headers libcef.dll | findstr machine輸出里 14C 表示 x868664 表示 x64。項(xiàng)目平臺(tái)目標(biāo)設(shè) x86 時(shí)輸出目錄只放 x86 的 CEF 文件設(shè) x64 時(shí)只放 x64。不要為了兼容兩種機(jī)器在一個(gè)目錄里混放CefSharp 不會(huì)自動(dòng)按位數(shù)切目錄混放時(shí)加載到哪個(gè)看文件系統(tǒng)順序。確實(shí)要同時(shí)支持 32 位和 64 位就出兩個(gè)安裝包或者啟動(dòng)器里判斷 IntPtr.Size 后切工作目錄普通業(yè)務(wù)客戶端沒(méi)必要做這么復(fù)雜。4.3 VC 運(yùn)行時(shí)與日志白屏?xí)r先看 cef.logCEF 原生層依賴 VC 運(yùn)行時(shí)缺運(yùn)行庫(kù)時(shí)進(jìn)程可能直接退出也可能彈一個(gè)系統(tǒng)錯(cuò)誤框后白屏。不要憑記憶裝年份用 Dependencies 或 dumpbin /dependents 看 libcef.dll 依賴哪些 msvcp、vcruntime缺哪個(gè)裝哪個(gè)x86 和 x64 分開(kāi)裝。裝完重啟一下客戶端再做驗(yàn)證有時(shí)候運(yùn)行庫(kù)剛裝完當(dāng)前進(jìn)程還沒(méi)重新加載。var settings new CefSettings(); settings.LogSeverity LogSeverity.Info; settings.LogFile Path.Combine(Application.StartupPath, cef.log);日志文件要放在有寫(xiě)權(quán)限的目錄Program Files 下普通用戶不可寫(xiě)時(shí)日志不會(huì)生成看起來(lái)像“沒(méi)日志”實(shí)際是寫(xiě)不進(jìn)去。cef.log 里重點(diǎn)看 libcef.dll 加載路徑、BrowserSubprocess 啟動(dòng)參數(shù)、GPU 初始化失敗、字體加載失敗。GPU 相關(guān)報(bào)錯(cuò)可以先加settings.DisableGpu true驗(yàn)證是不是顯卡驅(qū)動(dòng)或虛擬機(jī)渲染問(wèn)題確認(rèn)后再?zèng)Q定是否長(zhǎng)期禁用。日志級(jí)別不要長(zhǎng)期開(kāi) Verbose文件漲得很快排完障改回 Info 或 Disable。5. 避坑與排查白屏、設(shè)計(jì)器閃退、JS 未定義、進(jìn)程殘留的 5 條記錄5.1 設(shè)計(jì)器一打開(kāi)就崩別把 ChromiumWebBrowser 拖進(jìn)設(shè)計(jì)器現(xiàn)象是雙擊 MainForm.cs 進(jìn)設(shè)計(jì)器VS2010 停幾秒后直接退出或者彈“未將對(duì)象引用設(shè)置到對(duì)象的實(shí)例”。原因是 ChromiumWebBrowser 在設(shè)計(jì)時(shí)也會(huì)走構(gòu)造函數(shù)觸發(fā) Cef 初始化和子進(jìn)程創(chuàng)建設(shè)計(jì)器進(jìn)程里沒(méi)有完整的 CEF 運(yùn)行環(huán)境直接崩。解決方式是窗體上不放瀏覽器控件在 Load 事件里用代碼創(chuàng)建設(shè)計(jì)器里只留一個(gè) Panel 占位。已經(jīng)拖進(jìn)去的把控件從設(shè)計(jì)器刪掉構(gòu)造函數(shù)里的初始化代碼移到 Load 里重新生成后再開(kāi)設(shè)計(jì)器。5.2 運(yùn)行后白屏或黑屏先查 libcef.dll 和架構(gòu)現(xiàn)象是窗體正常出來(lái)瀏覽器區(qū)域全白cef.log 里可能有“failed to load libcef.dll”或“browser subprocess exited”。原因按概率排輸出目錄沒(méi)有 libcef.dlllibcef.dll 架構(gòu)和進(jìn)程位數(shù)不一致BrowserSubprocessPath 沒(méi)設(shè)置或路徑不對(duì)VC 運(yùn)行時(shí)缺失。解決順序是先看輸出目錄文件齊不齊再用 dumpbin 看架構(gòu)然后確認(rèn) BrowserSubprocessPath 指向?qū)嶋H exe最后用 Dependencies 查 libcef.dll 的依賴。四項(xiàng)都過(guò)還白屏把 LogSeverity 開(kāi)到 Verbose看日志里第一個(gè) error 出現(xiàn)在哪一步不要從最后一個(gè)報(bào)錯(cuò)往前猜。5.3 編譯報(bào) async/await 錯(cuò)誤VS2010 的 C# 4.0 不認(rèn)現(xiàn)象是從網(wǎng)上復(fù)制的 CefSharp 示例粘貼進(jìn)項(xiàng)目后async、await關(guān)鍵字下面全是紅線錯(cuò)誤提示“找不到類型或命名空間名稱 async”之類。原因是 VS2010 默認(rèn) C# 4.0async/await 是 C# 5 才有的語(yǔ)法。解決方式不是硬升框架而是把異步調(diào)用改成 ContinueWith 寫(xiě)法EvaluateScriptAsync 返回 Task用 TaskScheduler.FromCurrentSynchronizationContext() 回 UI 線程。如果項(xiàng)目里大量 async 代碼考慮單獨(dú)抽一個(gè) C# 5 的輔助程序集但老項(xiàng)目里通常不值得按最小改動(dòng)改成回調(diào)更穩(wěn)。5.4 JS 調(diào)用 C# 報(bào) undefined綁定時(shí)機(jī)和命名踩坑現(xiàn)象是頁(yè)面控制臺(tái)報(bào)window.bridge is undefined或者bridge.GetVersion is not a function。原因常見(jiàn)三種RegisterJsObject 在頁(yè)面 Load 之后才調(diào)用camelCaseJavascriptNames 參數(shù)和前端調(diào)用大小寫(xiě)不一致LegacyJavascriptBindingEnabled 沒(méi)在 Cef.Initialize 之前打開(kāi)。解決方式是先確認(rèn)綁定代碼在 Load 之前執(zhí)行再在頁(yè)面里打印Object.keys(window.bridge)看實(shí)際暴露了哪些方法最后核對(duì)注冊(cè)時(shí)第三個(gè)參數(shù)。舊分支的 RegisterJsObject 對(duì)綁定對(duì)象名敏感名字里不要帶點(diǎn)、橫線前端調(diào)用時(shí)對(duì)象名和方法名分開(kāi)檢查。5.5 關(guān)閉窗體后進(jìn)程殘留Cef.Shutdown 與 Dispose 的順序現(xiàn)象是主窗體關(guān)了任務(wù)管理器里 CefSharp.BrowserSubprocess.exe 還在再次啟動(dòng)程序時(shí)頁(yè)面加載失敗或直接白屏。原因是 ChromiumWebBrowser 沒(méi) Dispose或者 Cef.Shutdown 調(diào)用太早/太晚子進(jìn)程沒(méi)收到退出信號(hào)。解決方式是在 FormClosing 里先 browser.Dispose()把引用置空再 Cef.Shutdown()。如果窗體是多文檔結(jié)構(gòu)每個(gè)瀏覽器實(shí)例都要 DisposeCef.Shutdown 只調(diào)一次。調(diào)試時(shí)可以在 Shutdown 前后打日志確認(rèn)順序不要用 Application.Exit 直接殺進(jìn)程。6. 進(jìn)階技巧用 BrowserInitializedChanged 和請(qǐng)求頭把老控件跑穩(wěn)老項(xiàng)目里最容易寫(xiě)壞的是“等頁(yè)面加載”這段邏輯。很多人用 Thread.Sleep(3000) 然后 EvaluateScriptAsync機(jī)器慢的時(shí)候頁(yè)面沒(méi)好機(jī)器快的時(shí)候白等三秒。我一般用 BrowserInitializedChanged 事件確認(rèn)瀏覽器底層初始化完成再用 FrameLoadEnd 判斷主框架加載結(jié)束最后用 EvaluateScriptAsync 探 document.readyState。三層判斷比固定睡眠穩(wěn)也不會(huì)把 UI 線程卡住。下面這段只保留關(guān)鍵分支事件簽名以你包內(nèi) API 為準(zhǔn)。browser.BrowserInitializedChanged (sender, args) { if (!browser.IsBrowserInitialized) { return; } // 初始化完成后再加載業(yè)務(wù)頁(yè)面避免在 about:blank 階段搶跑 browser.Load(file:/// Application.StartupPath.Replace(\\, /) /index.html); }; browser.FrameLoadEnd (sender, args) { if (!args.Frame.IsMain) { return; } // 主框架加載完再探 readyState比固定 Sleep 可靠 browser.EvaluateScriptAsync(document.readyState).ContinueWith(task { if (task.IsFaulted || task.IsCanceled || !task.Result.Success) { return; } // 這里的返回值可以記日志也可以觸發(fā)后續(xù)業(yè)務(wù)初始化 }, TaskScheduler.FromCurrentSynchronizationContext()); };另一個(gè)實(shí)用技巧是給所有請(qǐng)求加自定義頭。老客戶端經(jīng)常需要后端識(shí)別“這是 WinForm 內(nèi)嵌瀏覽器”但又不想改頁(yè)面代碼。在自定義 IRequestHandler 的 OnBeforeResourceLoad 里給 request.Headers 塞一個(gè)固定鍵值返回 false 表示繼續(xù)請(qǐng)求。這樣后端按頭分流前端頁(yè)面不用動(dòng)。注意舊分支 IRequestHandler 接口成員較多除了關(guān)鍵方法其余成員按接口定義返回默認(rèn)值不要只實(shí)現(xiàn)一個(gè)方法就編譯。public class CustomRequestHandler : IRequestHandler { public bool OnBeforeResourceLoad(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IRequestCallback callback) { // 給每個(gè)請(qǐng)求打標(biāo)后端據(jù)此識(shí)別客戶端類型 request.Headers[X-Client] WinFormCef; return false; } // 其余接口成員按包內(nèi)定義補(bǔ)全默認(rèn)返回 false 或繼續(xù) }緩存目錄也值得單獨(dú)說(shuō)一下。默認(rèn)把 CachePath 放在 Application.StartupPath 下調(diào)試時(shí)沒(méi)問(wèn)題裝到 Program Files 后普通用戶沒(méi)有寫(xiě)權(quán)限緩存寫(xiě)入失敗不一定報(bào)錯(cuò)表現(xiàn)是頁(yè)面加載慢、登錄態(tài)丟、靜態(tài)資源重復(fù)下載。我一般把 CachePath 和 UserDataPath 改到 LocalApplicationData 下按產(chǎn)品名建子目錄啟動(dòng)時(shí)先 Directory.CreateDirectory再傳給 CefSettings。這樣升級(jí)安裝包不會(huì)把緩存清掉也不會(huì)因?yàn)闄?quán)限問(wèn)題出現(xiàn)“有時(shí)好有時(shí)壞”的玄學(xué)。驗(yàn)證時(shí)加載一個(gè)帶版本號(hào)的靜態(tài)頁(yè)刷新兩次看 Network 里有沒(méi)有 304或者看緩存目錄有沒(méi)有實(shí)際文件生成。從那以后我每次接老 WinForm 嵌瀏覽器的活都先做一個(gè)只有 about:blank 的最小 Demo確認(rèn) libcef.dll 架構(gòu)、BrowserSubprocessPath、VC 運(yùn)行時(shí)和 Cef.Shutdown 這四件事都過(guò)再往里面疊業(yè)務(wù)頁(yè)面和 JS 互調(diào)。最小 Demo 跑不通時(shí)不要改業(yè)務(wù)代碼先看 cef.log 和輸出目錄能省掉大量來(lái)回猜的時(shí)間。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
婷婷色导航| 日本韩高清无砖码22o| 亚洲中文字幕av| 国内毛片热久久思思热| 91色久| 96精品在线| 99热导航| 天天操人人操狠狠插| 欧亚性爱啪啪| 91在线丝袜视频| 四虎AV在线播放| 国产操逼视频在线观看| 国产夜夜操| 大屁股国产在线视频| 国产精品白丝| 极品后入免费视频| 偷拍自拍在线视频观看| 妇女视频网站| 大学生口爆吞精| 久插综合| 婷婷激情五月天小说网| 日韩无码AB| 久久性生大片免费观看性| 99色热| 国产精品白虎| 9色国产精品一区粉嫩| 有码人妻系列| 98人妻精品一区二区色欲| 丁香五月天婷婷姐| AV一起草在线| 亭亭在线资源| 啊啊啊快操我视频| 国产成人无码啪| 精品国产乱码久久久兰草影视| 色视频蜜乳| ai欧美亚洲小说| 蜜臀99久| 丝袜天堂| 欧洲无码一区二区| 国产成人无码a| 97天天在线| 九九香蕉网| 久久精品国产亚洲妲己影视| 亚洲少妇诱惑| 91丨熟女丨丰满熟女| 91精品国产91久久青草 | 成年在线视频日本亚洲在线视频区精品江靖宇公司 | 少妇九九九九| 91天天综合网,天天综合网| 激情小说日韩无码| 久久久精精精| 91M一社| 精品乱码在线观看| 亚洲性猛| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 豆花视频操逼网址| 97超碰超碰| 蜜桃臀一区二区aV| 九九av| 亚洲情色五月天 | 91久久国产精品| AV中文字幕剧情1区2区3| 亚洲图片欧美日韩| 大胆91| 狠狠色婷婷777| 91精品国产日韩欧美综合| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 欧美亚洲涩涩| 色老牛| 青青草一区二区三区四| 啊啊啊啊啊在线| 久久99草| 久久97视频| 欧美成人精品一区| 另类图片综合| 国产丝袜欧美在线视频| 思思热影视| 久久精品国产72国产精品福利| 蜜乳Av成人片网站| www.色婷婷.com| 天天弄天天操| 中文字幕少妇色| 嗯嗯啊啊好大好爽| 91丝袜在线播放| 超碰97久久| 九九热九九| av一区二区三区不卡| 夜夜爽夜夜操| 人人干人人搞人人摸| 欧日a| 在线只有精品| 日韩9999| 色色毛片| 亚洲av无线观看| 欧美亚州手机在线| 日韩精品操少妇| 欧美天天弄| 久久久久久日韩| 激情AV| 4141514逼喷水三级片| 熟妇国产免费一区| 国产精品制服丝袜清纯唯美| 色情综合网| 亚洲AV永久无码一区仙野| 欧美久久草熟女| 国产嫩草精品A88AV| 黄页视频网站野外| 91成人在线| 中字一区| 欧美另类综合久久| 97在线欧洲| 亚洲97资源| 亚洲成人性爱网站在线播放| 精品射1999| 天天躁日日躁狠狠躁| www.婷婷| 极品粉嫩少妇视频| 日韩色欲久久一二三四区| 欧美 日韩 国产传媒| 天天综合网日韩| 亚洲国产无码精品首页久久久| av操操不卡| 你懂的在线观看区国产| 7月婷婷综合| 亚洲国产精品成人综合| 天天日天天舔东京热| 国产亚洲深夜激情| 午夜福利一区二区三区四区五区色婷婷| 天天肏天天干| 精品.99999| 无码天天操| 性色国产东北露脸精品视频| 无码一区二区精品视频久久久春药| 大香蕉啪啪啪啪在线| 欧美一二三级精品在线| 久久精品无码熟妇一区二区三区视频导航 | 久热久一区二区三区| 丝袜熟女一区二区三区| 蜜臀久久99精品久久久久久-DVD| 老鸭窝亚洲毛片| 精品一区二区在线针对华人免费观看这里只有精品免费观看 | 国内毛片无码一级毛片| 国产精品麻豆免费视频| 欧美日韩小说| 欧美大干日韩| 岛国成人av在线播放网址| 密臀视频三区免费网站| 九9热伊人| 激情一区二区三区在线观看| 亚欧成人中文字幕一区| 被操高清无码视频| 欧美日韩另类激情图片| 人妻超碰青青草98| 无码人妻丰满熟妇奶水区毛片| 日韩国产在线观看av| 97伦综合| 一二视频神马久久传媒| 久久精9| 狠狠色色| 黑人嘿嘿嘿超爽免费视频| 2023天天操夜夜操| 天美传媒AV在线播放| 黄久在线| 青青三级视频| 少妇内射www在线观看视频| 麻豆精品久久久久久久| 国产精品久久久亚洲一区| 秋霞一级视频在线观看免费| 成人性爱视频在线看| 777超碰| 中文字幕在线免费观看 | 国产视频小说| nuu12国产麻豆精品| 亚洲天堂日本| 久9爱精品| 亚洲丨在线| 97在线免费看视频| 啊啊啊免费视频| 国产一级高清免费观看| 999久久久免费精品国产牛牛| 国产午夜福利专区综合| 97操| 久久性生大片免费观看性| 啊啊啊啊,啊啊好多水 | 国产 日韩 另类 视频一区爱| 久久草在线综合视频| 老司机射| 亚洲色图大香| 国产精品制服丝袜中文字幕日韩一区二区三区| 国精品一区二区三| 熟妇女伦乱视频视频| KK色在线影院| 成人精品久久久午夜福利| 激情综合五月婷婷| 亚洲伊人成综合成人网| 亚州成人a∨| 热热色综合网| 97中文天堂| 久久久一区二区| 一级黄色性爱裸体视频| 大香蕉五月天婷婷| 九九九九九九视频| 三级精品三级在线观看| 东京日日夜夜| 少妇人妻在线| 激情专区综合| 老汉网| 亚洲色电影在线| 亚洲 欧美 手机在线观看| 国产不卡中文字幕免费avi| 干B网| 裸体美女国产免费久久久网站| 久久99草| 欧美一级美片在线观看免费| 国内精品999| 日本欧美不卡| 久久天堂婷婷网| 大香蕉草草| 久久久 国产精品| 欧美精品成人亚洲| 性猛交| 欧美熟女少妇| 999综合网| 无码色| 日曰骚久久精品| 国产精品熟女丝袜一区二区| 精品国产91久久久久久一区黄无| 欧美日韩大香蕉| 蜜臀精品1区2区| 亚洲日韩人妻中文字幕一区| 少妇与黑人高潮在线| 大香蕉免费3| 成人五月天色网| 蜜臀久久99精品久久久电影| 久久久性爱视频| 亚洲av综合色区图片亚洲| 在线观看视频91| 岛国黄色大片网站| 亚洲视频二区| www.夜夜| 婷婷影院入口| 欧美色综合网| 操九九九九九九| 久久区| 九一亚洲国产免费| 3p国产欧美99热| 日本 免费 一区二区三区 久久香蕉| 欧美性生活男人的天堂| 欧美日本视频一区| 你操综合| 久久精品国产亚洲AV高级北京| 国产中午字一暮区| 97精品一二区| 国产亚洲日本精品在线| 97国产天堂岛| 岛国视频一二三区| 嗯嗯啊好爽| 国产美女口爆吞精| 色蜜AV| 日韩无码精品综合久久| 破处bbq| 在线观看AV不卡| 神马久久久久久伦理片| 亚洲 欧美 日韩 国产一区二区| 久久亚洲熟妇在线视频| 亚洲欧美精品91| 亚洲密乳AV| 99热这里都是精品| 亚洲成人妻日韩在线| 日本东京热加勒比久久| 色色青青久久| 精品女人999| 久久精品国产99精品亚洲蜜...| 人妻素股| 亚洲色性情三级| 亚洲欧美成人在线| 韩国黄片aaaa| 亚洲欧洲中文日韩女优乱码| 妇女一区二区三区| 久久久91福利姬| 亚洲aw毛茸茸在线 | 欧美影院一区二区三区| 另类图片五月天| 91殴美大片| 国产三级电影免费观看| 激情小说图片亚洲首页| 91bbb| 国产在线激情| 中文字幕午夜精品久久久| 亚洲国产精品久久久久婷婷青年| ?亚洲伊人伊成久久人综合网| 精品欧美不卡在线播放| 欧美资源| 日韩欧美加勒比| 久噜噜| 天天综合网一91网| 日本人妻一区二区| oumeisetu综合| 大香蕉丝袜一级片| 在线v中文字幕一区二区三区| 激情综合网亚洲| 992大香蕉| 婷婷五月天色网| 青青草男人天堂| 97色97好| 国产女人9999| 97色色国产视频| 91欧美| 日韩欧美tv一区二区在线观看| 国产精品白领在线观看| 秋霞一集毛片观看| 日韩免费中文字幕视频| 日日夜夜青青草母狗| 色婷婷影院| 五月丁香啪啪网| 久9视频| 亚洲av无码成人精品国产| 在线观看黄色电话| 欧美黄色片AAAAA| 亚洲AV成人无码久久精品播放| 久久精品高清AV| 粉嫩av久久一区二区三区| 欧美黑人熟妇精品91| 国产精品一区二区密臀| 亚洲一二三四区| 亚洲高清自拍| 免费αV在线视频| 69XX一中文字幕人妻91| 国产精品高潮久久久无码| 免费岛国一级片| 欧美熟妇成人一区二区| 亚洲av综合色区无码一| 思思热免费视频观看| 国产无码精品无码| 日本三级一区二区 在线| 91精品女厕偷拍视频| 3d成人精品一区二区| 亚洲?V无码专区在线电影| 欧美1区二区三区公司| 欧美日韩另类在线播放| 天堂v无码免费视频| 一本精品日本在线视频精品| 婷婷AV一区二区三区| 丁香五月久久| 久久久av爱| ai欧美亚洲小说| 欧美同性恋 的搜索结果 - 91n| 青青草自拍视频在线播放| 99热这里只有精| 亚洲欧洲精品成人| 欧美肥臀在线| 中文字幕天堂在线| 色官网在线| 亚洲日韩肥臀视频在线观看| 蜜桃臀久久| 午夜精品久久一区二区| 中日韩久久久| 色综合潮| 欧美激情1区| 久久久久久久久久va| 亚洲日韩美女中文字幕乱| 亚洲精品久久久久久久蜜桃臀| 久久午夜鲁丝片| 夜色AV无码手机在线影院| 9久久美女首页| 日韩性爱毛片操骚逼| 在免费jIzzjIzz在线视频| 色色亚洲| 亚洲系列欧美| 亚洲少妇综合| 蜜乳AV一区二区三区四| 熟妇视频一区二区三区在线观看| 9精品久久| 日产成人久久| 色欲三区| 欧美最婬乱婬爆婬性视频 | 麻豆国产视频精品观看| 99热精品在线观看| 97精品一区| 宅男影院久久久,99| 欧美图片偷拍| 超碰吊日色| 另类专区加勒比| 26uuu性物| 91香蕉视频在线观看免费| 啪啪啪综合网| 丝袜无码a片| 香蕉综合网| 日本99久久| 午夜天堂网| 久久中文字幕女同性恋一区| 2017天天拍大香蕉| 高清国产av无码| 乱子伦一区二区三区国产精品| 激情文学小说一区二区| 热思思免费视频| 欧美 亚洲 偷拍自拍| 天堂伊人久久| 26uuu国产日韩综合在线观看| 91欧美高清| 少妇的嫩逼图片| 岛园激情| 啊啊啊啊,啊啊好多水 | 91干熟女| 性交一区二区在线播放| 亚洲精品无码久久AV| 96AV久久久| 亚洲成人激情小说视频| 天天爽天天操| 久艹99| 女人喷水视频在线观看| #NAME?| 蜜臀99久久| 国产玖玖| 亚洲精品自拍| 色天堂综合| 日本东京热加勒比久久| 欧美激情片一区二区| 91色宗合| 国产白嫩精品久久| 久久人妻熟女一区二区| 视频二区美腿丝袜制服人妻欧美| 中出20p| 18禁超污无遮挡无码免费网| 神马久久中文字幕| 欧美日韩午夜精品一区二区三区 | 乱人伦 国语对白:视频直接看| 97视频免费在线| 精品人妻中文字幕4399| 久久精品六区| 日本久操视频| 久9综合在线| 国产精品午夜高潮呻吟久久av| 日本午夜久久电影| 色欲久久99国产精品久久久久久| 偷拍欧美激情| 美女国产一区二区久久| 69久久| 免费观看欧美日韩操逼视频| 日本成a人v网站在线观看| 好吊色在线观看| 日韩免费中文字幕视频| 啊啊啊久久久视频| 激情综合五月| 91影库| 欧美色图校园春色| 女优免费一区二区永久| 久久av一级av少妇av高潮| 人妻喷水| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 欧亚日本情色| 熟妇最新先锋一二三区| 亚洲成人性爱在线观看| 九九九精品| 97人人爱人人做人人乐| 欧美成人一区二区三区在线播放| 欧美96交| 91久久久老司机| 欧美夜夜狠| 色黄色美女大长腿午夜视频| 久夜视频| 久久中文字幕女同性恋一区| 国产大片精久久久久久| 国产高清无码一区三区二区| 鸥美中出| 五月天AV资源| 怡红院成人av| 五月天综合网| 国产偷拍自拍在线视频| 久久精品福利影院| 久久久久久久九九九九| 嫩草伊人久久精品| 日韩在线76| 国产亚洲精品美女久久久m| 亚洲自拍另类丝袜综合| 亚洲中文字幕97久久精品少妇| 日韩大香蕉| 亚洲天堂一二| 超碰伊人在线| 9 7超碰在线免费观看| 丁香六月婷婷久久综合| 7777欧美成是人在线观看| AV一区观看| 91色婷婷综合久久中文字幕二区| 加勒比久久av| 五毛骚逼极品美女怕怕| 丝袜喷水在线| 午夜天堂精品久久| 国产一级久久久| 97人妻色| 久99久视频精选| 亚洲欧美经典一区二区| 欧美黄色片AAAAA| 日韩一区二区高清在线观看的| 综合亚洲欧美精品日韩?v| 国产精品剧情| 91肉丝| 亚洲国产丝袜熟女av| 欧美熟妇色| 青草伊人网| 国产一区二区三区,在线观看观看| 夫妻四区五区六区| 久久,精品一二三| 五月花婷婷| 五月婷婷啪啪| 男人的天堂啪啪| 久久精品国产精品亚洲艾通辽熟妇| 91人人臊| 五月丁香网站| 色色婷婷五月天| 色五月综合| 色综合五月天| 丝袜制服字幕在线| 人妻精品一区二区全免费| 蜜桃传媒一区二区亚洲| 成人A片男人的天堂| 91N综合在线| 97在线资源| 99黄页网站| 超碰97导航| 欧美丝袜亚洲| 高清国产av无码| 色yeye成人免费视频| 又粗又长又爽在线观看| 久久受www免费人成| 熟妇xxxxx性春色| 久操操AV电影| 26UUU欧美激情一区二区| 一区操逼日比视频| 91久久久久久| 超碰精品| 欧亚 另类 久| 尤物av网站免费在线播放| 在线人成亚洲视频免费观看| 国产久久av| 综合啪啪| 欧美白嫩在线放| 九九九九97| 精品在线78| 日本操逼视频免费| japan日本高清乱xxxx| 三级三久久线久久99久目本WW| 韩国一区二区精品亚洲| 中文一区二区| 欧美成年人性爱视频免费观看| 色欲无码人妻日韩欧美精品| 天天色粽合合合合合合合| 男人的天堂不卡一区二区| 2025亚洲男人天堂| 九九五月天| 探花视频免费观看国产专区| 风流老熟女一区二区三区l| 色婷婷丁香五月| 伦在线97| 极品另类| 日操粉逼逼| 99热免费| 亚洲高清综合网| 大黄片做爱的大的| 欧美精品1区2区3区| 伊人成人情色综合| 国产女人9999| 2019天天干| 7777欧美成是人在线观看| 久久久9视频| 日韩本不卡视频在线观看| 成人性爱av| 看看小穴| 极品AV网站在线观看| 欧美92| 欧美激情性久久久久久| 97亚洲一区| 99热婷婷一区二区三| 一本精品日本在线视频精品| 亚洲另类综合欧美| 伊人宅男大香蕉| 老司机天天操| 久久超碰久| 快播电影网日韩新片| 国产精品第一页国产大屁股视频免费区 | 国产精品久久久久久亚洲色欲| 九热中文字幕| 先锋色眉乱伦资源| 日本在线不卡123| 极品色电影院| h无码动漫在线观看| 久操九九九九九九九九九九九九九九九九九九九九九九九九九九九九 | 丁香色色网| 女人18精品一区二区三区| 黄页视频网站野外| 日本淫穴在线| 黑人白女精品一区| 亚洲人在线| 搡老熟女老女人老熟妇免费视频| 一区黄二区黄| 久九九九九九九九热| 人妻色偷色噜| 秋霞免费AV| 啊啊啊好爽快点啊啊啊嗯嗯| 天堂国产AV| 成人精品视频| 欧美色亚洲| 色色五月天激情| 福利视频一区二区微拍| 欧美日韩99| 91N综合在线| 欧美亚洲情色| 婷婷亚洲五月***久久| 干婷婷综合网| 久久久久久久久九九久孕交| 国产AV线| www亚洲免费| 久久久影院| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 亚洲第一黄色av网站| 噜噜噜在线视频| 欧美一区二区亚洲天堂| 凹凸视频在线一区二区| 97天天操天天干| 国产av波波国产精品| 成人夜夜| 男人的天堂2018东京热啪啪啪| 神马久久久久久| 91总综合网| 亚洲成?V人片在线观看福利| 国产传媒av天美传媒在线| 啊啊啊不要啊啊受不了了视频在线 | 熟女高潮精品一区二区| 亚洲情欲| 亚洲宅男天堂| 看黑丝美女操逼青青网站| 亚州欧美综合| 欧美人人操人人插| 丁香六月婷婷综合| 蜜臀va69| www…国产操逼| 免费9 1久久| 男人女人18禁片免费看网站| 国产自偷自拍一区| 97欧美精品综合| 射综合网| 五月天激情小说| 亚洲少妇综合| 国产福利精品最新在线| 亚洲熟妇白浆无码AV| 91成人在线免费视频| 亚洲资源网| 五月天亚洲色图| 干b在线性社区| 乱伦一二三区| 久草线上视频免费看| 国产强奸超碰AV| 青青伊人久久| 亚洲成人性| 抽插亚洲无码| 亚洲午夜免费狠狠干| 大香蕉78| 男女香蕉一区二区| 日本亚洲熟女视频| 男女国产精品| 夜夜操一区二区| 国内毛片国产专区二| 久久久久久久唑| 国产乱弄免费在线视频。 | 久久久久幕乱码| 99热超碰| 天天操夜夜嗨| 亚洲色交| 2020中文字幕在线| 日本精品一区三区| 国产精品嫩草影院免费| 国产伦精品| 青青操在线亚洲视频观看欧美在线| 啪一啪免费视频| 欧洲久久一二线| 激情五月天校园春色网| 色色色色色色色色色色色色色色综合 | 久久精品视| 999国产精品999| 91人妻人人澡人人爽人人精品| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 密臀在线免费观看| 久久精品国产亚洲AV无码电影| 美女91网站| 亚洲丝袜二区在线| 久久成人午夜狠狠| 91红杏| 久久久久久夜夜夜夜夜| 丁香五月社区| 日本123区操B视频| 亚洲精品aa久久伊人 | 欧洲Au麻豆| 日韩一区二区精品视频| 欧美日韩操逼嗦吊| 精品一区二区亚洲国产| 色九九九九| 亚洲日韩成人性爱视频| 日本日皮视频逼| 婷婷九月| 91欧美长吊| 超碰碰小说97| 超碰2017| 啊嗯嗯啊好大好爽| 青青草日本中文字幕| 午夜精品久久久久久久99热影院| 国产蜜臀精品一区免费尤物| 99热这里只有精品8| 久久久久久亚洲精品不卡人乳| 97人人草| 日本三级人妻a人妻一在线| 混色激情av| 在线观看十八禁| 情色日播放AV| 蜜桃在线观看一区二区三区| 秋霞男人网| 动漫av中文| 伊人久大| 日本爽爽爽爽爽爽免费视频| 少妇厨房愉情理伦片bd在线观看| 日韩欧美操逼xxx| 人妻久久一区二区三区| 无码人妻一区二区三区色欲aⅴ| 黄色片A级一区二区三区| 欧美日韩97| 日韩中文字幕人妻视频| 性色av网站| 99久久无色码| 都市激情人妻一区二区青青操视频| 97在线青| 久久人| 欧美性巨大╳╳╳╳╳高跟鞋| 最新日韩黄片| 精品人妻1237| 亚洲熟女人妻中文字幕一区二区| 日韩av在线精品观看| 国内精品伊人久久久久影院会| 夜夜爽77777| 亚洲天堂少妇| 国产亚洲日韩在线三区黑人| 男女打扑克高清网站| 久久久久无码一妻区| 一区二区三| 五月天激情四射| 久草热制服丝袜在线观看| 天天看天天日| 日韩精品区二区三区不卡| 嗯嗯啊啊好大好爽| 日韩欧美大力操| 国产视频三区四区| 国产精品一区二区三区四区五区| 思思热久久成人| 中国黑人三级片网站上区| 久久少妇| 色999人与兽| 欧州一区二区三区四区| 久9爱经典视频| 97久精品| 综合色91| 成人综合色网| 色姑娘综合网| 亚洲91亚洲| av在线观看不卡网站| 久久做97| 日韩 欧美 视频 在线 一区| 亚洲人妖网| 欧美人妻一区| 九色黄站| 天天看高清麻豆| 人妻激情偷乱视三区频一区二区| 色踪合AV| 99热免费| 亚洲第一黄色av网站| 人人手机欧洲亚洲国产人妻| 国产精品亚洲一级av第二区| 四虎免费视频| wwwcaobibi| 人妻天天爽天天爽三区| 99热导航| 91AV天堂| 久久久免费懂色| 在线情色电影 91大| 人人超碰在线观看黄| 啊啊啊97视频| 欧美视频激情久久久久久| 婷婷五月天综合网| 午夜天堂精品久久| 乱人伦 国语对白:视频直接看| 欧美特大黄一级片片免费| 五月天丁香网| 婷婷尹人大香蕉免费| 91逼逼女人91| 自拍丝袜美腿人妻| 日韩中字av一区| 久久97| 丝袜天堂网| 四虎精品永久在线观看| 日韩情色AV| 亚洲第一色页夜| 亚洲在高跟鞋自慰久久在色线| 欧美日韩婷婷中文| 嗯嗯啊啊日韩精品| 可乐操亚洲蜜911| 黄色大片视频在线免费看| 欧美片第一页| 操逼天美3区| 丁香五月色| www四虎| 四虎免费视频| 97亚洲综合影院| 日韩中文字幕精品一区在线| 国产高清26uuu| 日逼逼免费看| 久久日韩毛| 综合一区二区影视| 自拍内地三级在线观看| 日韩一区二区精彩视频| 91操碰| 性交一区二区在线播放| 亚洲开心网| 97摸视频| 中文字幕片| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | 超碰诱惑| 超碰人人操97碰| 日本91白丝| 在线 亚洲 网爆 自拍| 91熟女网| 亚洲日韩熟女人妻高清在线| 亚洲国产成人综合碰碰三级经典| 日本精品无码三级网站| 日韩影片中文字幕一区二区三区| 天天搞欧美| 乱伦Av网| 青女在线| 久久久久亚洲?V片无码V| 青青草日逼视频| 亚洲欧美高清无码| www.久久| 无码不卡亚洲成?人片| 亚洲精品国产无码高清| 日韩 欧美 校园一区| www久久国产精品| 精品人人| 久久久久亚洲熟妇熟女| 少妇内射www在线观看视频| 精品国产乱码久久久兰草影视| 午夜精品久久久久久久男人的天堂| 大香蕉啪啪啪| 亚洲诱惑| 黄色视频60分钟| 天天干天天中出av| 熟女五十路一区二区三| 懂色av中文字幕一区二区三区天美| 国产高清无码一区三区二区| 啊啊啊啊啊啊啊啊要喷了| 日本一区二区成人在线| 成人开心网在线视频| 五月天开心网| 精品国模无码| 青青草字幕AV| 婷婷久久综合| 中文?日韩?免费?精品| 久艹99| www久| a啊啊啊啊啊啊啊啊一区二区| 死我十八禁| 欧美激情五月天| 色吧 综合| 开心激情婷婷| AV和黑人在线播放| 亚欧美色图| 可以看的av| 久久精品综合| 欧美极品女人的天堂| 综合操逼| 亚洲伊人久久综合97| 情色五月天就去干| 人妻一区二区三区| 丁香六月综合激情| 日韩欧美tv一区二区在线观看| 偷拍盗拍亚洲色图图片| 日韩精品三级片长长久久| 欧美激情五月天| 影音先锋乱| 午夜无码精品免费看性色| 国内外内射高清视频| 久久久青青草| 91在线综合网| 嗯嗯啊啊操死我| 男人的天堂在线2| 婷婷爱五月| 人妻天堂综合网| 日欧操屄视频| 五月综合久久| 欧美十八禁在线看| 操逼操操操91| 三级片网站在线播放| 亚洲AV无码黄色强奸| 国产日韩手机视频在线| 伊人久大| 超碰人人乐97| 韩国午夜理伦三级好看| 亚洲se91| 91综合天天看| 精品美女久久一二三| 日韩卡一卡二卡三在线| 欧美熟女丝袜| 嗯嗯啊在线视频| 欧亚日韩中文在线| 日日摸日日碰| 亚洲操逼视频网站| 中文字幕一区 二 区 三 四 五 区日 日 骚 | 欧美在线大香蕉| 亚洲精品三| 亚洲中文字幕在线视频一区二区| 中出91| 多乙久久久久久| 国产乱伦搜索结果91P| 美女毛片999| 色伊人91| 成人免费视瓶| 熟妇熟女一区二区三区| 欧美在线大香蕉| 超碰日韩人妻| 一区二区三| 台湾佬中文娱乐网久久久久久久久久com| 精品久久一区二区三区四区五区| 国产小u女在线观看| 国产久久成人| 伦激情人妻另类人妻| 国产一级高清免费观看| 婷婷人妻激情| 日本欧美m v精品网站加| 久久精品亚洲东京热色播| 四月丁香婷婷| 国产精品国产自产拍高清AV| 九九九九九九九精品视频| 91丨九色丨国产打屁股| 操逼日韩无码 | 热热色青青草| TS人妖另类精品视频系列| 午夜舔阴达高潮视频免费看| 伊人国产成人av网站| 超碰97久久| 懂色Av| 热99这里有精品综合久久 | 天天久久久久久| 国产在线激情| 9国产超碰| 久久夜黄色无码A级大片| 99热只有这里有精品| 亚洲欧美大| 日本超碰97日韩精品人妻| 超碰97资源网亚洲| 干B网| 中国乱伦一区二区| 国产精品一区二区亚洲人成毛片| 亚洲国产欧美一区二区潘金莲| 极品欧美一区二区三区| 人人插人人摸人人| 久久久啊啊| 超碰97COm中文| www黄片免费看com| 精品无码一二三四区| 国产精品爆乳懂色蜜乳| 偷拍 精品另类 凸凹了四区| 中文字幕免费看| 日韩欧美午夜视频在线| 欧美在线官网| 97干在线视频| 丰满人妻一区二区三区在线| 青青色在线观看| 日韩在线女优天天干| 不卡日本一区二区| 小少妇| 天美麻豆黄色录像| 色嗨嗨在线| 国产在线激情| 五月丁香六月婷| 欧美色图亚洲激情| 99爱久久视频频| 岛国激情视频在线观看| 国产欧美日韩臀| 最近2019中文字幕国语免费版| 青青草在线视频播放器| baisiav| 国产日产精品久久快鸭的功能介绍| 天天爽夜夜欢视| 国产极品美女高潮无套在线观看| 综合网久久| 在线小说视频一区| 国产AV高清AV无码| 久久久涩| 日日干日日操五月天伦理视频| 免费av高清无码| 亚洲人妻熟妇三十三区| 国产91影院| 高清肉丝中文无码| 久久久久亚洲?V片无码V| 97人人夜| 国产又大又粗又长视频在线| 一级黄色性爱A级片| 中文字幕欧美精品亚洲日韩蜜臀| 色婷婷电影网| 黄色成年| 久久日本熟女精品一区| 偷窥自拍亚洲色图| 激情久久av一区av二区av| 亚洲无码 国产无码| 校园春色 亚洲| 日韩欧美资源| 啊啊啊啊二区好大| 动漫片子网站3黄| 成人五月香网在线| 激情小说五月天| 色一色综合网| 99re热有精品视频国产| 日韩三级伊人| 欧美亚洲丝袜人妻制服中文99| 第四色亚洲色图| 9久综合网| 99久久99九九99九九九| 日韩国产成人自拍视频| 午夜男女爽爽大片免费观看| 欧美97爱| 超碰91在线| 少妇高潮特黄A片| yw尤物av无码点击进入麻豆| 高清无码人妻久久久一区二区三区aⅴ| 精品少妇人妻| 久久超碰av在线| 97 国产精品| 啊啊啊不要嗯嗯在线观看| 欧美玖玖爱免费玖玖| 天天综合,91入口| 日韩无码服务区| 超碰人妻久久| 8x福利精品第一福利视频导航| 97天天日| 中国zzijzzijzzwww精品| 中文字幕乱亚洲美女精品一区| 无码操逼天堂| 欧美最婬乱婬爆婬牲视频| 国产成人啪一区二区| 夜夜青青无码影院| 麻豆熟妇乱妇熟色A片在线看| 精品人妻久久久| 亚州性9| 国产91av在线播放| 国产日韩区| 婷婷丁香五月天综合东京热| 思思热免费视频观看| 亚洲色堂免费视频| 国产地址二三| 日韩美女,国产传媒,视频一区| 伦理弟一页| 男人的天堂com| 午夜福利无毒不卡| 可以在线观看AV的网站| 国产激情在线| 亚 欧 美 综合| 97色论| 欧美男人天堂| 九九碰九九爱97超碰| 大香蕉综合| 近亲乱伦一区二区| 国产一级舔足在线观看| 久久大香蕉手机高清| 免费视频观看60秒| 中文伊人大香蕉视频| 国产精品人妻熟女aⅴ| 夜夜欢天天干| 亚洲drav色图| 日本天堂网| 强奸乱伦麻豆| 人人操,人人液| 超碰吊日色| 色偷综合| 男人的天堂亚洲| 欧美性爱三区二区| 综合另类| 伊人网高清| 91M一社| 密臀AV在线| 91扒丝袜综合在线| 日韩精品一二三四| 久久亚州精品成人Av无| 欧美亚洲| 欧美99| 亚洲第一免费视频| 亚洲资源吧| 国产一区二区三区,在线观看观看| 性爱精品一区| 大香蕉青青9| 色婷婷在线视频精品导航| 五月色综合| 色情五月综合婷婷| 免费操逼视频下载| 国产一级137片内射麻豆| 熟妇人妻丰满久久久久久久无码 | 嗯嗯不要 视频| 久久久性爱视频| 九九毛片这里只有精品| 五月丁香综合啪啪| 无遮挡猛进视频免费无限观看| 亚洲第一黄色av网站| 国产精品无码久久久久2028| 国产农村妇女毛片精品久久| 国产后入清纯| 国产AV天美传媒一区二区三区 | 五月天综合网| 成人日韩欧美| 激情综合五月| 91久久久久久久久18| 91色久| 五月婷婷久久综合| 8050午夜少妇无码| 久久精品国产72国产精品福利| 无码不卡亚洲成?人片| 亚洲AV麻豆Aⅴ无码电影一| 91操操操操| 九九九九亚洲| 变态综合色| 欧美激情视频一区二区| 国产精品农村妇女| 国产后入| 在线观看不卡一区二区三区| 视频国产欧美在线播放| 亚洲无码com| wwwxxx日本爽| 黄色激情电影在线观看| 亚洲情色中文字幕一区| 爱媛媛久久国产福利| 欧日a| 日韩成人网址| 97视频网站在线观看| 超碰公开久久网| 日韩9999| 欧美 牲| 大香蕉青青9| 一本大道久| 久久色网| 可以免费看黄片的视频| 亚洲精品一二区| 色小视频蜜乳| 五月丁香色综合| 色爱欲亚洲| 欧美91丝袜| 乱人乱色一区二区三区免费| 亚洲开心网| 亚洲 自拍偷拍 欧美| 欧亚乱色熟女一区二区| 99综合网| 99精品久久| 日本丝袜美腿人妻九九| 天天摸夜夜摸| 午夜αv| 91福利网在线观看| 久久九九视频九九视频| 秋霞视频一区二区|