亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線(xiàn)實(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í)依賴(lài)與本地化資源另有 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客戶(hù)端只能跑在 .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 客戶(hù)端、不能隨便升級(jí)框架的人也適合想先跑通 CefSharp 再疊業(yè)務(wù)邏輯的開(kāi)發(fā)者。下面按“選包、起工程、調(diào)生命周期、部署、排錯(cuò)”的順序拆開(kāi)講代碼按 VS2010 的 C# 4.0 語(yǔ)法寫(xiě)不依賴(lài) 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ì)提示程序集依賴(lài)不兼容C# 4.0 又不支持 async/await網(wǎng)上大量 CefSharp 示例是 C# 5 以后的寫(xiě)法復(fù)制進(jìn) VS2010 會(huì)直接編譯不過(guò)。另一個(gè)容易被忽略的是原生層CefSharp 依賴(lài) 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 的依賴(lài)再看 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 讓瀏覽器鋪滿(mǎn)窗體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)緩存和用戶(hù)數(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 線(xiàn)程更新控件前用 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 這類(lèi)基礎(chǔ)類(lèi)型復(fù)雜對(duì)象讓前端序列化成 JSON 字符串再傳減少綁定層序列化差異。Notify 里如果要更新 WinForm 控件不要直接改JS 調(diào)用線(xiàn)程不一定是 UI 線(xiàn)程用 BeginInvoke 包一層。注冊(cè)對(duì)象名不要用 window、document 這類(lèi)保留字也不要和頁(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 線(xiàn)程避免在回調(diào)里直接操作控件時(shí)拋跨線(xiàn)程異常。這個(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容易把線(xiàn)程調(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軟件渲染與圖形依賴(lài)虛擬機(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ù)客戶(hù)端沒(méi)必要做這么復(fù)雜。4.3 VC 運(yùn)行時(shí)與日志白屏?xí)r先看 cef.logCEF 原生層依賴(lài) VC 運(yùn)行時(shí)缺運(yùn)行庫(kù)時(shí)進(jìn)程可能直接退出也可能彈一個(gè)系統(tǒng)錯(cuò)誤框后白屏。不要憑記憶裝年份用 Dependencies 或 dumpbin /dependents 看 libcef.dll 依賴(lài)哪些 msvcp、vcruntime缺哪個(gè)裝哪個(gè)x86 和 x64 分開(kāi)裝。裝完重啟一下客戶(hù)端再做驗(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 下普通用戶(hù)不可寫(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 的依賴(lài)。四項(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)鍵字下面全是紅線(xiàn)錯(cuò)誤提示“找不到類(lèi)型或命名空間名稱(chēng) async”之類(lèi)。原因是 VS2010 默認(rèn) C# 4.0async/await 是 C# 5 才有的語(yǔ)法。解決方式不是硬升框架而是把異步調(diào)用改成 ContinueWith 寫(xiě)法EvaluateScriptAsync 返回 Task用 TaskScheduler.FromCurrentSynchronizationContext() 回 UI 線(xiàn)程。如果項(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)、橫線(xià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 線(xiàn)程卡住。下面這段只保留關(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)求加自定義頭。老客戶(hù)端經(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í)別客戶(hù)端類(lèi)型 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 后普通用戶(hù)沒(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
返回資訊列表
se吧提供91精品国产91久久久久久| 操一对老熟妇爽上天视频| 人妻偷拍一区二区三区| 中文字幕精品人妻丝袜| 国产97亚洲| 亚码激情| 尹人免费观看视频在线| 色一区二区三区综合| 床上啊啊啊一区二区三区| 加勒比色99999| 啊啊啊啊嗯嗯嗯用力好爽| 久久久久久十| 91爱看| se01国产在线视频| 一本大道久| 欧美色偷拍| 性videos欧美熟妇hdx| 综合大香蕉美。| 青青草伊人久久| 极品美女福利在线观看| 国产白丝网站| 大香蕉92| 色嘟嘟人妻天堂网| 色婷婷影院| 欧美激情专区| 欧美在线大香999| 久久精品视-一级做a爰片性色毛片16美国-中国女与老外在线精品 | 男女一进一出视频久久| 91久久18禁| 色婷婷五月综合激情中文字幕| 91制服丝袜| 啊啊啊在线看| 99精品久久久久久| 国产久久视频| 男人的天堂啪啪| 999岛国大片| 天天干夜夜一操| 一,爱啪啪,在线免费视频| 中文字幕丰满子伦无码专区在线视频最新| 欧美国产操逼| 欧美综合在线91| 亚洲男人天堂Av| 欧美视频在线第3页| 欧美成人午夜免费福利785| 亚洲精品一区二区精华| 伊人黄色片| 精品少妇99| 亚洲交性| 成人精品久久| 亚洲国产精品无码AV久久| 欧美精品97| 天天伊人| 亚洲激情在线观看一区| 久久av一级av少妇av高潮| 噜噜噜噜久久久精品免费| 久久精品操| 久久久久99999| 国产精品乱码久久久久| 男人女人18禁片免费看网站| 1769成人国产精品视频| 午夜无遮挡男女啪啪视频| 园内精品自拍视频在线播放| 亚洲强奸乱伦影视网| 久草尤物| 成人性爱全视频观看| 久久婷婷精品| 亚洲国产第一页综合视频| 性欧美另类高清| 亚洲综合性感在线| 九九成人精品| 裸体1区| 九久久九九久视频| 国产免费黄色一级大片| se吧提供国产乱老熟视频胖女人 | 高树玛利亚无码流出| 日韩pv中文| 青娱乐手机日韩在线视频| AV在线播放网址| 国产精品com| 日本十八禁免费看污网站| 一区二区三区美女超清| 黑人操一区二区| 99久久婷婷丁香| 国产精品亚洲无码| 欧洲综合视频| 屌妞视频久久久久久久久久久久| 久草成人影片| 久久久性| 九九伊人网| 国产原创精品| 97干97色| 人妻在线视频| 日韩午夜国产| 久久天堂网| 最新av中文字幕高清| 强奸乱伦大香蕉网| 久久综合精品一区二区三区| 97视频免费播放| 91亚洲网| 视频黄色国产一级| 九九九九一级| 老熟女搡BBBB搡BBBB视频| 蜜乳AV网址| 国产熟妇一区二区| 日韩av免费一级电影| 久久婷婷五月天| 激情小说亚洲图片| 欧美午夜一区二区三区| 91天天爱| 最新9久久久9免费视频| 性天堂| 老外又粗又长一晚做五次| www.狠狠| 91N综合网| 久久精品国产亚洲AV高级北京| 天天香香欲综合| 成年无码动漫av片无尽在线| 五月婷丁香| 欧美后入式| 亚洲麻豆av一区二区| 国产免费一区在线观看| 伊人96在线| 亚洲午夜福利在线影院| 风月影院男女十八禁| 在线观看不卡一区二区三区| 亚洲精品色| 神马久久久久久| 激情一区二区三区在线观看| 亚洲毛片基地专区| 啊啊啊好湿久久| 国产美女高潮| 色情亚洲日本成人| av网站在线观看了| 亚洲色图 综合| 亚洲熟女精品| 边做饭边操逼逼| 婷婷国产精品九区| 综合网亚洲1| 美女国产一区二区久久| 精品视频一区二区| 亚洲AV无码天美传媒一区| 风韵犹存大大大大香蕉| 色眯眯射| 综合一区中亚洲国产成人综合精品| 色亚州人久干视频在线观看免费版| 顶级丝袜熟女一区二区三区| 国产美女高潮视频| 亚洲91少妇| 少妇的嫩逼图片| 人人乐大香蕉| 亚洲av影音先锋| 在线洲亚线| 亚洲城人男人的天堂| 国产精品久久久久无码A√| 999日韩中文精品观看视频。| 99re超碰| 亚洲区限制级| 99久久九九| 91综合网站| 夜夜福利| 亚洲人精品久久久喷水| 日韩欧美一级特黄大片| 久久六六| 限制级中的三级片中的黑粗大屌屌日人妻熟女| 开心五月深爱五月| 亚洲1区2区三区高清中文字幕| 亚洲第一页欧美| 日本高清_区二区三区| 欧洲精品二区| 欧美亚洲厕所精品偷拍91| 亚洲啪啪视频一区二区| 国产h小视频在线观看免费| 97视频620| 色婷婷综合网站| 美女啊啊啊啊啊| 97在线观看免费视频l| 日韩乱伦视频| 女优免费一区二区永久| 中文乱码字字幕在线第5页| 国产亚洲色婷婷99精品91| 成人av动漫在线观看| 亚洲性网| 国产粉嫩蜜臀av一区二区三区| 久久五月份| 亚洲古典另类欧美在线| 国产又黄又爽又刺激久久久久久| 91性色| 熟妇人妻一二三区免费| 欧美91精彩| 人妻夜夜爽天天爽麻豆三区网站 | 国产对白刺激视频| 成人小说另类在线| 热99这里有精品综合久久| 加勒比久久av| 少妇99| 加勒比AV网| ,国产乱人伦精品一区二区三区| aⅴ日韩成人电影av在线免费看av大全 | 亚洲欧美另类激情小说| 欧美色图91| 超碰9 7女人 | 五月天婷婷基地| 人妻人人做人人澡人人爽欧美一区| 国产在线视频午夜精华在| 亚洲丝袜在线观看| 亚洲第一页色网| 97欧美色综合| 操少妞在线视频| 中文字幕久久亚州无码| 久久精品人体AV| 久草福利在线资源站| 亚洲成人福利电影免费| 中文字幕精品日韩中文字幕| 思思热国产在线视频| 久久性爱视频免费看| 欧美黄色手机在线观看| 涩综合导航| 老外又粗又长一晚做五次| 国产欧美在线观看免费观看| 国语av最新自产拍在线观看| hd成人一区二区在线| 超碰成人公开| 精品一区二区人妖| 色999五月色| 久久美女福利是上海美女| 亚洲图片激情综合另类| 综合操逼| 91超级碰碰| 人妻少妇一区二区| 91亚洲影院综合| 综合激情97| 黑人精品久久97| 亚洲日本男人天堂网| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 亚洲激情天堂网| 国产情色在线| 蜜桃久久一区二区| 黑人白女精品一区| 久久草在线综合视频| 亚洲精品视频在线| 五月婷婷hd| 久久一区二区加油站| 91日韩网站| 91精品人妻一区二区三区蜜桃| 啊啊啊操死我| 成人午夜小视频手机在线看| 亚洲青青青视频在线| 久久一二三四五六七八九区区| 校园春色宗合网| 亚洲中文sv| 欧美天天| 亚欧国产无码精品在线| 色综合美国| 极品少妇99| 欧美精品,四区。五区| 人妻丝袜日本| 啪一啪免费视频| 久草成人福利导航| 久久影视二区三区行押| 国产精品久久天天干| 国产亚州高清国产拍精| 91人妻视频| 亚洲九九视频| 午夜激情成人在线观看| 人妻天堂综合网| 情色五月天网| 亚洲麻豆av一区二区| 日本韩欧美在线播放a| 99999精品成人| 丰满欧美放荡少妇在线| 亚洲色欲天天天堂色欲网女| 五月久久HDAV| 熟女人妻精品一区二区视频| 深夜激情无码| 大香蕉综合在线| 蜜臀一区二区三区在线| 欧美性爱97超碰| 日本不卡免费二区| 少妇xx精品| 午夜天堂网| 97欧美综合| 粉嫩在线一区二区懂色| 啊啊啊好疼| 成人a级高清视频在线观看| 日韩乱码Av| 麻豆91熟妇人妻中文字幕茄子| 高清无码人妻久久久一区二区三区aⅴ| 青青伊人这里只有精品| 欧美色图 人妻| 国产日韩色综合| 日韩AV中文字幕电影| 亚洲色图91| 夜夜中出国产| 中日亚韩免费视频| 91老熟女视频| 老熟妇一区二区三区啪啪| 91蜜臀在线久久久久| 99啪啪视频| 91综合天天看| 日本精品人妻少妇一区二区| 超碰97丝袜| 久久伊人大香蕉| 天天综合站| 国产三区免费在线观看| 性色高清..……| 精品亚洲国产成人精品| 中文字幕人乱码中文字的预防方法| 国产精品白丝在线播放| 国产二区三区粉嫩在线| 岛国黄色大片网站| 深夜国产福利| 97爱b| 欧美性爱第一区| 欧洲精品久久| 国产精品久久久久久片| 先锋女优在线观看视频| 九九热男人天堂| 欧美一级黄色免费专区| 日韩图区| 国产精品亚洲一区二区三区四区| 清纯唯美激情| 夜夜嗷嗷一区二区| 户外裸露刺激视频第一区| 99精品无码| 亚洲午夜免费狠狠干| 国产强奸乱伦无码视频| 高跟伊人julia ann| 欧美黄色大片在线观看 | 高清在线偷拍自拍视频| 久草看看看| 激激五月| 亚洲āv网址在线观看| 免费成人在线熟妇网| 国产精品96| 亚洲中文字幕乱码无码一区二区| 亚洲第一黄色av网站| 涩涩久久精品| 一区二区三区四区姦女| 国产树林里野战在线看| 亚洲成a人v欧美综合天堂下载 | 夜夜高潮夜夜爽夜夜爱爱一区| 69精品少妇一区二区三区蜜桃| 试看60秒 爽| 精品人妻一区春色| 激情文学网伊人| 国产精品人人爽人人做可爱福利| 精品国产a∨一区天美传媒| 青青草在线成人视频| 亚洲第一精品在线视频| 久久超碰网| 破处bbq| 日本 欧美 亚中文字幕| 午夜高清成人在线视频| 在线午夜成人无码视频| 九t超碰| 亚洲最大无码中文字幕网站| 国产在线视频二区| 欧美激情一区| 亚洲情色 自拍| 日韩欧美丝袜诱惑| 啪啪啪综合网| 激情婷婷丁香| 国产三级中文字幕粉嫩| 久久久婷婷| 婷婷五月天在线观看| 久久久久久国产成人| 俞拍久久国应视频| 色悠久久久av| 98福利在线视频| 日韩AV一区二区三区四四| 美国aaaaa一级黄片| 亚洲图片欧美偷拍| 精品女同一区二区三区| 色香欲天天天天综合色| 久久超碰亚洲人| 玖玖人人爱| 乱色视频中文字幕| 午夜成人爽爽爽爽A片李冰冰| 91国产丝袜美女| 看黑丝美女操逼青青网站| 欧美色三级片91| 欧美视频在线视频免费va| 成年人性爱日韩| 天天视频网站黄| 精品久久久久久中文字幕视频免费| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 亚洲欧洲无码bt精品合集| 屁股久久久久久久| 91另类| 亚州综合色| 久9九综合在线| 久久成人东京热人妻| 九九这里只有精品| 日韩天天综合| 美欧色综合| 唯美清纯 妖精视频| 丝袜美腿91| 久久久天美| 久久亚洲欧美一区二区三区-亚洲国产精品第一区二区 | 97亚洲综合在线| 亚洲丨在线| 国产一线二线三线av| 大香蕉中文在线| 国产精品在线免费| 无码精品久久| 国产亚州高清国产拍精| 免费一级视频特黄色大片| 妺妺跟我一起洗澡没忍住| 全球成人中文在线| 欧美在线官网| 69视频福利导航| 狠狠色一区二区中文字幕| 和协影院中文字幕三区| 97射欧美| 日躁天天爽爽| 精品一区二区在线针对华人免费观看这里只有精品免费观看 | 男人的天堂免费| 国产操逼网站亚洲一级黄色| 黄色片A级一区二区三区| 极品欧美一区二区三区| 日本色色的视频| 九九久久99| 蜜桃中文字日产乱幕4区| 日本999精品视频| 91精品久久久久久77777| 久久成人精品| 久久精品国内Av熟女高清| 国产成人一级av88| 久久精品一区二区三区不卡| 另类专区加勒比| 91操熟女视频 | 91天美免费| 呦呦影院| 精品国产精品一区二区| 97超碰色屌| 精品人妻一区二区三区蜜桃视频| 人人操人人摸人人骑| 国产精品成人无码av无码免费| www超碰| 大奶尤物鲍汁淫荡欧美视频粉嫩夜夜骚| av天天在线| 91丝袜美女视频| 欧美精品成人在线播放| 亚洲最大的黄色电影网站。 | 99久久精品国产高潮| 九一亚洲国产免费| 国产精品一区二区三区免费视频| 黄色AAAAA欧美| 精品久久視頻在线| 天天综合欧美黑人| 欧美人妻精品一区二区| 91高跟美女在线播放| 男人的天堂99| 丁香六月激情综合| 久久久91福利姬| 奇米四色网| 中文字幕二区日韩天堂| 97在线亚洲| 18禁止看精品中文字幕| 噜噜在线| 欧美亚洲首页| 懂色AV蜜臀无码精品APP| 欧美少妇性乱| 岛国激情视频在线观看| 日本曲间由美性生活片| 色臀av| www.91久久| 亚洲欧洲第二视频在线观看色图| 国产性爱在线视频一区二区| 精品视频专区| 国产辣妈在线视频福利| 嗯嗯,啊啊,国产精品| 九九九九九九综合| 开心五月激情网| 久久久久久久久久久精| 国产精品爽爽va在线观看98| 夜夜嗨免费视频| 温婉少妇玩3p| 不卡六六在线91| 久久精品色欧美aⅴ一区二区| 国产精品久久久九九九| 久久亚洲AV成人精品无码| 青青草日本中文字幕| 久久久久久久伊人精品| 国产精品密臀网在线观看| 妇女性内射冈站HDWWWCOM| 亚洲瓯美色图| 黄色视频60分钟| 日韩综合97P| 九七超碰| 超碰人妻中文在线| 人人妻人人狠人人| 日本Suv精品一区二区| 人妻天堂综合网| 夜夜黄| 偷窥自拍亚洲色图| 国产女同视频在线播放| 伦理弟一页| 91 亚洲 欧美 日韩 国产 综合| 看黑人AV不卡| 91精品久久久| 少妇人妻在线| 国产黄a三级三级三级av在线看| 操逼网站网站| 激情五月天校园春色网| 日韩女模中文造逼| 青娱乐淫乱1314| 欧美性爱网97| 五月天久久久| 一本色道综合久久欧美| 欧美亚洲激情一二三| 五月婷婷爱六月丁香色| 日韩少妇无码| 精品中文一区二区| 偷拍欧美综合| 亚洲高清国产理伦片| 美女网站91| 嫩草 人人网精品| 丁香色色网| 国产操逼视频在线观看| 天天操妹子| 五十路熟女工口| 麻豆国产免费影片| 伊人操你| 啊啊啊啊啊啊在线| 亚洲人久久久网| 91亚洲黑人| 一本一道波多野毛片中文在线| 中文字幕一区二区无码成人| 亚洲男人天堂2016| 精品一区二区三区最新| 亚洲另类电影| 26uuu性| 秋霞 色色| 久久久久婷婷精品av电影| 按摩中文字幕| 婷婷九月| 欧美黑人精品一区二区| 亚洲欧洲无码bt精品合集| www.男人天堂| 97日视频| 日韩钢筋无码高清啾啾啾| 国产乱伦性爱AV| 国产日产精品久久快鸭的功能介绍| 国产精品96久久久久久| 99色热| 偷拍新久久| 青女在线| 亚州春色| 超碰97最新人妻| 高凊专区人人操| 中文高清一区二区的| 色婷婷香蕉| 欧美三级中文字幕hd| 精品久久久久久中文字幕三区| 亚洲欧美碰碰| 91麻豆天美传媒在线| 33044男人的天堂深夜备| 欧美 日韩 婷婷 五月| 成人老鸭窝人人在线视频| 日韩人妻大香蕉| 久久婷五月天| 这里有精品| 综合色99| 天天日天天操心| 久久综合婷婷| 99色综合| 情侣开房子拍 日韩无码 女的很漂亮| 精品少妇后入一区二区三区四区人妻巨乳| 最新日韩黄片| 超碰人人在线| 97碰在线视频| 狠狠狠一区二区三区| 欧美日韩国产中文精品字幕自在自线,| 九九RE视频在线精品| 丁香五月天激情网站| 操人91| 色五月首页| 久久黄黄| 亚洲第一二区另类图| 亚洲色图加勒比| 99RE在线视频精品,这里只有精品| 婷婷av在线中文字幕| 日韩极品无码B| 精品一区二区综合熟妇| 亚洲码专区| 99只有精品| 午夜久久一区二区无码中出| 亚洲色图欧美色图制服丝袜| 久草在| 96久久久久久久| …亚洲黄色厕厕女女在线播…| 女性喷水高潮在线观看| 欧美日韩大香蕉| 欧美日韩性爱无码| 东京热激情视频一二三区| 中文字幕 一区二区 亚洲无码| 欧美操逼视频二区| 大白逼三四级| 久久78| 亚洲最大成人a毛毛片| 婷婷色五月激情| 欧美性天天影视| 在线亚洲丝袜视频网站| 蜜桃天美传媒AV一区二区三区| 亚洲天堂一区| 欧美人人AAA| 人人喜人人妻| 欧洲站一级二级三级h| 超碰97人妻在线| 日韩操逼HD| 男女打扑克高清网站| 啊灬啊灬啊灬啊灬高潮奶出了免费视| 東南亚性呦成人伦理资源在线视频| 婷婷超| 成人av性爱电影在线观看| 强免费黄色网址| 今日头条成人一区二区三区四虎精品| 久久中文字幕女同性恋一区| 国产丝袜美女在线一区| 久操大香蕉手机视频在线看 | 久久久亚洲Av| 四虎永久在线精品免费网址 | 国产黄色视频久久| 欧美婷婷| 2026国产精品视频| 内射夫妻三片| 欧美AB在线观看| 午夜精品人妻二区三区| 搞中出久久| 欧美专利1区2区3区4区5区免费| 亚洲丝袜天堂| 色97综合中文字幕| 日日操丁香五月天| 久久精9| 亚洲一区二区三区春色| 岛国片在线观看视频亚洲| 伊人久久蜜月| 亚洲91在线播放影院| 天综合网| 91天美| 狠狠操夜夜操蜜桃视频三区| 国产AV天美传媒一区二区三区 | 99国产在线 精品 视频| 欧美日韩国第一区| 啪啪啪综合网| 先锋精品av色鲁| 超碰97国产欧美| 九九色婷婷| 女人18精品一区二区三区| 操逼逼中文字幕| 欧美色图91p| 国产一区二区三区白丝| juliaann丝袜大战黑鬼| 51久久夜色精品国产麻豆| 超碰97精品在线| av激情亚洲五月天| 啊啊啊啊啊啊在线看| 欧美加勒比| 一色网男人的天堂| 国产中出内射一区二区| 91婷婷伊人狠人| 亚洲牲交| 天天澡天天爽日日av| 久久成人国产精品| 日本好吊色视频| 欧美网站免费| 无码二级三级| 殴美,日韩国产伦精品| 中文字幕精品亚洲熟女| 日本道久久综合色色| 国产成人五月天丁香花| www超碰| 亚洲色图综合| 色哟哟1区2区| 自拍大香蕉乱插| 97亚洲中文| 亚洲欧美九九九| 91搞逼视频| 国产日韩中文字幕欧美| 日韩人妻少妇 一区二区三区| 91美女小视频| 日本东京热大香蕉a片| 国产精品成人蜜臀AV在线| 综合自拍| 久偷拍| 人妻熟女av国产网站| 久久久一区二区三区麻豆| 91人人爽人人爽人人人,gav福利视频导航,日韩欧美亚洲国产字幕四区 | 日韩一级特黄av毛片| 日韩亚洲97| 日本久久久久久久久| 国产一区免费午夜视频| 欧洲一区二区三区四区在线观看| 天堂九九九九九九九九九| 日韩精品碰碰| 男人的天堂com| 久久欧洲| 亚洲精品99| 国产福利一区二| 人妻丰满熟妇av无码区蜜桃| 男人天堂久久日韩| 成人福利视频网| 九九综合九九综合| 五十路成人在线视频二区三区| 99色色网| 人人操人人叉人人插人人| 欧美色宗合| 欧美日韩美女精品久草一区二区三区| 国产欧美一区二区| 色色五月天婷婷| 人人摸.人人色| 超碰97丝袜| 久久亚洲日韩国产欧| 伊人97色天使| 五月婷婷深深爱| 黄色网址在线免费观看| 日本不卡一区二区| 亚洲综合色图欧美| 国产和美国毛片| 亚洲有薄码区日本系列中文字幕| 色青青久久影视| 在线A日本| 91色图| 91熟女丨91老女人| 亚洲 欧美 日韩另类 麻豆| 好吊色一区| 国产女人高潮视频| 欧美一级色| av午夜影院在线播放| 亚洲黄片免费在线播放| 丝袜美腿av女优在线| 国产精品suv一区| 青青草久久一区网| 一区,二区,三区网站| 日韩精品一区二区三区色欲 | 欧美性天天影院| 欧美A√综合网| 超碰超碰95| 久超碰在| 9/A片| 日本三级中国三级99人妇网站| 一个人免费HD91视频| 日韩不卡在线一区二区| 色色色色日本| 天天操天天干一区二区 | 九九色逼| 超碰九色| 亚州色图第三区| 亚洲18禁| 97精品国产97久久久久久免费| 91 手机在线播放 绯色| 偷拍 亚洲| 欧美日韩99精品麻豆传媒| AV天堂丝袜| 国产夫妻一区二区| 日韩紧密久久| 天天天天天超碰| 色www精品视频在线观看| 性性欧美| 超碰在线在公开超碰在线在公开| 中韩中文字幕在线观看| 777超碰| 麻豆精品一区二区三区四区免费观看| 亚洲一区日韩精品中文字幕| 强被迫伦姧在线观看无码网站| 尤物网站91| 日本 色 导航| 亚洲aV无码成人在线观看| 乱老女人一区二区视频| 中文啪啪视频| 欧美熟女妇同| 黄色片G G G| 天天操天天干美女网址导航| 操人妻视频| 成人无码欧美一级A片狼牙直播| 亚洲欧美人妻| A 在线网址| av资源在线观看少妇| 久久女婷| 久久久∴| 亚洲成人AB| 青青草毛片| 亚洲色色探花| 成人情色一区二区| 中文字幕日韩精品久久| 嗯……啊…嗯嗯…啊…好舒服| 搡老女人老妇女老妇老熟女怎么读| 日本精品人妻少妇一区二区| 在线小视频| 91bbbbbb| 人妻美腿丝袜日韩| 婷婷色综合欧美日韩| 国内毛片婷婷六月色| 久久思思热| 成人热久久精品| 99精品九九九九九九| 日韩黄色片子| ..日韩av毛片精品久久久| 依人大香蕉| 国产精品久久久久久久久久久久久久久久 | 精品夜夜澡人妻无码| 偷拍在线观看视频| 国产99热| 美女黄频a美女大全免费皮| 成人夜夜爽| 天天影视之亚洲综合网| 国产精品4p在线观看| 7777欧美成是人在线观看| 色九月综合| 久久这里只| a级理论午夜日本| 亚洲精品欧美专业| 久久久久久久97| 人妻-91porn| 欧美大香蕉卡久久| 南澳成人一级片在线播放| 国产午夜激片Av毛片不卡| 色女99一级片在线观看| 狠狠爱夜夜| 日本一级性爱| 久久宗合亚洲| 四虎在线视频| 亚洲 欧美 手机在线观看| 亚洲区限制级| 先锋影音av先锋一区| 开心五月激情网| 99热国产| 久久精品国产亚洲AV高级北京| 伊人成人情色综合| 91精品91久久久久77777俄罗斯老妇姓x| 在线观看综合精品亚洲| 亚洲人精品午夜不卡| 眼镜人妻101.com| caopeng97人妻| 黄色免费一级在线毛片| 亚洲欲色9532548967一区| 青青草原av| 亚洲超碰在线| 日日骚网站| 日韩欧美午夜一区二区| 亚洲人妻熟妇三十三区| 一本色道久久天天射天天干| 91色综合激情| 乱伦熟女论坛| 在线综合 亚洲 欧美中文字幕 | 久久国产逼| 人妻一区久久二区三区色播| 欧美精品久久久久久久丰满| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 精品久久久久久中文字幕视频免费| 日本三级中国三级99人妇网站| 国产91美女视频| 中文字幕精品一区二区精品| 九九碰九九爱97超| 东京热激情视频一二三区| 国产精品人妻无码久久久互動交流| 91在线美女| A一区片| 久久久久ab| 九色在线熟女国产黑人| 玖玖爱视频网站| 国产成人资源| 天天干天天操天天操夜夜操天天操| 午夜激情床戏激情| 国产精品永久免费10000| 91男人天堂网| 丁香五月激情综合国产| 天美传媒AV在线| 欧美超碰96| 欧美日韩在线视频网站| 九九国产| 狠狠操天天干| 高清无码在线播放网站| 二三四区精品| 欧美性爱五月天| 欧美性爱精品七区| 精品成人女人久久| 国内毛片国产专区二| 久久超碰97| 天天日美女的B| 1024日韩| 欧美日韩国产成人高清| 欧美在线视频播放| 中文字幕成人| 一级毛片电影免费看| 超碰公开久久网| 欧美性爱18观看| 欧美,日韩,中文,另类| 欧美日韩理论一区| 国产浮力影院第1页| 78超碰| 国产偷人妻精品一区二区在线| 成年女人18级毛片毛片免费观看| 偷拍 欧美 日韩| 男女性扦B| 99re6久热只有精品6在线直播 | 亚州宗合另类| 国产99久久99热这里只有精品15 | 成人情色一区二区| 亚洲欧洲自拍图片专区满春格| 日本高清一本二本免费不卡| 97干com| 欧洲性爱无码区| 日日躁狠狠躁天天躁精品| 国产大片精久久久久久| 色婷婷影视| 91情色| 免费国产| 97日视频| 精品久久久中文字幕不| 极品白嫩美女白浆成人福利在线看| 一本大道青青| daxiangjiao你懂的| 久久鲁夜| 国产精品一级毛片不卡视| 国产精品直播在线观看直播| 国产sv美女内射| 欧美久久人体| 中文字幕视频一区视频二区| 国产AV高清AV无码| 乱伦AVxx| 亚洲AV性爱电影| 青草草免费网站av| 久久久人妻| 人人澡人人干| 国产日韩美女小穴视频网站不卡| Julia Annxxxxx| 精品九九九九九九九| 亚洲国产剧情少妇激情| 97蜜桃综合| 日本青青草在线| 久久婷婷五月天| 天天色粽合合合合合合合| 大香蕉久操| 国模精品娜娜一二三区 | 青青草影视蜜久久| 97伦乱| 在线观看啊啊啊啊啊| 97频视在线| 青青草玖玖爱| 久久九操在线观看| 99热18这里只有精品| 无码人妻丰满热妇又大又粗| 黄色大香焦1级‘′‘| 亚洲av影音先锋| 一级久久久久久久久久久| 成人三一级一片aaa| 人人玩人人添人人澡免费| 国产精品99精品视频网站| 飘花国产午夜精品不卡| ..日韩av毛片精品久久久| 性暴力欧美猛交在线直播| 天天操人人操狠狠插| 欧美激情性爱视频网站| 无码精品蜜桃一区二区三区ww| 成年人三级黄色片视频| 久久综合资源一区二区| 自拍大香蕉乱插| 婷婷久久综合| 国语人妻精彩刺激| 台欧久久精品视频| 欧洲免费一区二| 色老汉色| 天天做天天爱天天爽AV| 精品97精品97| 裸体美女久久久| 欧美一区二区传媒| 欧美中文狠| 人妻蜜桃臀| 97爱| 变态乱伦伪娘灌肠一区二区| 日韩中文字幕视频在线观看| 青青国产在线拍揄自揄拍| 99精品高潮| 这里只有精品97| 国内精品久久人妻性色av| 免费啪啪av| 人人色人人操在线| 天色综合网| 91人妻久久久久久久久久久久久| 精品一久久久| 欧美久久人体| 精品人妻中文字幕高清| 乳欲人妻办公室奶水| 久久99综合| 不卡九肏| 亚洲天天自拍| 日韩无码精品综合久久| 成人国产精品三级A片| 五月丁香综合啪啪| 大香蕉伊人亚洲| 久久精品六区| 強姦亂倫a| 欧美色五月| 天天弄欧美| 亚洲九九视频| 操逼天美3区| 97超级久久强资源| 香蕉大久久久| 人人摸人人入| 国产超碰人人操| 狠综合网| 国产偷人伦激情在线观看| 日韩偷拍一区二区三区| 国产精品大香蕉| 天综合网欧美| 亚洲码在线中文在线观看| 男女一级A片大黄,一进一出| 久久久久久大| 2017天天插| 亚欧成人中文字幕一区| 肥臀熟女福利视频一区二区| 91在线观看,天天综合| 国产久久免费精品视频| 久久精品欧美一区蜜桃| 999久久久久久久久| 91九色蝌蚪在线观看| 国产无马av| 日本欧美m v精品网站加| 久久亚洲国产成人| 欧美有码激情视频一区二区三区| 天美麻豆黄色录像| 狠狠色伊人亚洲综合网站色| 又黄又爽在线观看视频| 变态另类专区| 黄片免费看黄片免费看| a片亚洲一本通视频| 十八禁电影伊人网| 日本伦乱九九九综合| 99久在线精品99re8| 啊啊啊要高潮了| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | 国产综合在线视频网站| 花野真衣| 少妇天堂| 超碰av人人人| K8久久久久| 成人午夜视频免费播放| 无码九九| 国产97色在线| 欧美在线大香999| 精品一区二区成人| 欧美最大综合网| 久干9操| 激情四射五月天| 黄色大香焦1级‘′‘| 大香蕉综合久久| 精品久久久久久中文字幕三区| 久久综合女优| 久操com| 亚洲综合性网址| 高清国产精品无码| 天天内射| 91麻豆va国产精品| 婷婷10月天青娱乐| 99热色精品| 欧美亚洲天天| 欧美黑人猛交春色影视大全| 深夜福利黄片| 99re只有精品| 日韩精品免费高清视频在线| 综合av影片| 强奸a片网| 熟女人妻一区二区三区免费看| 91亚洲不卡一区| 大屁股人妻女教师撅着屁股| 日日日啊啊啊| 中文操嬖片。| 熟女少妇一区二区三区| 又大又黄国产| 国产精品久久久久久照片| 色偷综合| 丁香六月啪啪| 午夜男女爽爽爽影院视频| 91AV天美在线视频| 激情四射五月天| 超碰地址久久| 天天摸夜夜操视频| 120分钟婬片免费看| 99婷婷一区二区| 日韩美女,国产传媒,视频一区| 五月天婷精品激情| 久久精品国产亚洲av水密被窝| AV一二区| 国产 丝袜 欧美中文 另类| 亚洲91综合| 操逼无毒无码免费视频| 国产日本久久免费精品| 亚洲综合999| 曰韩香蕉97| 91亚州日韩高清| 亚洲免费在线探花| 超碰色大香蕉| 91国产大片| 97操操| 国产成人欧美一区二区三区的国产| 日韩欧美麻豆| 久久激情网| 国产精品女生av| 九九九网站| 久湿久久 | 天天欧美色| 日韩午夜精品一区二区三区电影| 超碰色综合| 色偷综合| 桃色六月天| 99热精品在线| 3p国产色噜噜一区| 国产精品日韩在线一区| 国产美女自拍视频| 啊啊啊啊二区好大| 蜜臀av一区二区三区免费观看| 国产综合网站在线播放 | 天天肏天天干| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | av国产无码| 岛国色情视频在线观看| 91在线视频国产网站| 狠狠干妹子| 岛国人妻少妇av在线观看| 欧美 亚洲 综合 制服| 国产精品秘 福利姬在线观看| 在线观看免费视频国产| 国产精品不卡高清在线观看| 亚洲极品| 日本中文字幕一区| 国精综合一二三区影视| 国产久久久9999| 神马精品视频| 五月婷婷综合在线| 国产中文字幕曰本毛片| 久久青青草原免费视频| 69XX一中文字幕人妻91| 色悠久| 女性91网站| 亚洲成人贴图| 国产精品久久泡妞网站| 极品少妇久久久久| 欧美 日韩第一性色| 97国产精品久久久久| 东北操逼| 日韩精品系列| 亚洲高清少妇| 久久久久斤小| 色眯眯av| 区自美91| 好一吊区二区| 中日韩久久久免费看| 亚洲人码13| 夜夜做夜夜爽精品视频| 国产中文字幕在线| 久久国产精品视频| 97久久久网站| 国产路线专区| 亚洲图片欧美偷拍| 老熟女综合| 欧美极品美女aaaaaa级黄片| 秋霞一级鲁丝片A片| 免费观看性欧美一级|