CefSharp ChromiumWebBrowser 将初始化并加载传递给构造函数的页面,但调用 MyBrowser.Load("URL") returns 时出现空白屏幕
CefSharp ChromiumWebBrowser will initialize and load the page passed to the constructor, but calling MyBrowser.Load("URL") returns a blank screen
如果我将网站传递给浏览器构造函数,例如:
ChromiumWebBrowser MyBrowser = new ChromiumWebBrowser("www.google.com");
Google 将加载。但是,初始化浏览器后,调用
MyBrowser.Load("Example.com");
给出一个空白屏幕。我有与 FrameLoadEnd 相关的事件,它在 google 完成加载时触发,但在调用 Load 后根本不触发,这意味着网页甚至没有在屏幕外加载。
我花了很长时间解决这个问题,但找不到解决方案。我已经通过 NuGet 下载了这些包,安装了 VC 2012 Redistributable,初始化了 CefSettings,切换到 x86 等。我不确定我做错了什么,只是可能误解了这种方法的本意用过的。也有可能我没有将正确的文件复制到我的输出目录,但我的所有参考文献中确实有 CopyLocal = True。
请务必注意,我的浏览器是通过编程实现的,而不是拖放到 WinForms 设计器中。这对我的代码来说非常必要,因为我有大量浏览器在抓取网络并向用户显示页面,因此需要可靠的加载方法。
这是我的 debug.log 发布文件夹中的示例,经过编辑删除了太多重复项:
[0826/130205:WARNING:resource_bundle.cc(304)] locale_file_path.empty()
...
[0826/131439:WARNING:resource_bundle.cc(304)] locale_file_path.empty()
[0826/134434:ERROR:renderer_main.cc(212)] Running without renderer sandbox
...
[0826/135650:ERROR:renderer_main.cc(212)] Running without renderer sandbox
[0826/135658:ERROR:ipc_channel_win.cc(136)] pipe error: 109
[0826/135921:ERROR:renderer_main.cc(212)] Running without renderer sandbox
...
[0826/135921:ERROR:renderer_main.cc(212)] Running without renderer sandbox
[0826/135933:ERROR:ipc_channel_win.cc(378)] pipe error: 109
[0826/135933:ERROR:ipc_channel_win.cc(412)] pipe error: 232
[0826/140141:ERROR:renderer_main.cc(212)] Running without renderer sandbox
...
[0826/140141:ERROR:renderer_main.cc(212)] Running without renderer sandbox
[0826/140148:ERROR:ipc_channel_win.cc(412)] pipe error: 232
不幸的是,如果浏览器未初始化,Load
会自动失败。下一个版本是一个主要的重写,它会抛出一个异常,所以你会立即知道发生了什么。如果挂钩 IsBrowserInitializedChanged
事件,您应该能够在它触发后安全地调用 Load。
https://github.com/cefsharp/CefSharp/blob/cefsharp/41/CefSharp.WinForms/ChromiumWebBrowser.cs#L233
撰写本文时的当前版本是 41.0.1
。
下一个版本将是 43.0.0
(nuget.org
上已经有一个 -pre
版本,尽管它还没有完全准备好迎接黄金时段)
如果我将网站传递给浏览器构造函数,例如:
ChromiumWebBrowser MyBrowser = new ChromiumWebBrowser("www.google.com");
Google 将加载。但是,初始化浏览器后,调用
MyBrowser.Load("Example.com");
给出一个空白屏幕。我有与 FrameLoadEnd 相关的事件,它在 google 完成加载时触发,但在调用 Load 后根本不触发,这意味着网页甚至没有在屏幕外加载。
我花了很长时间解决这个问题,但找不到解决方案。我已经通过 NuGet 下载了这些包,安装了 VC 2012 Redistributable,初始化了 CefSettings,切换到 x86 等。我不确定我做错了什么,只是可能误解了这种方法的本意用过的。也有可能我没有将正确的文件复制到我的输出目录,但我的所有参考文献中确实有 CopyLocal = True。
请务必注意,我的浏览器是通过编程实现的,而不是拖放到 WinForms 设计器中。这对我的代码来说非常必要,因为我有大量浏览器在抓取网络并向用户显示页面,因此需要可靠的加载方法。
这是我的 debug.log 发布文件夹中的示例,经过编辑删除了太多重复项:
[0826/130205:WARNING:resource_bundle.cc(304)] locale_file_path.empty()
...
[0826/131439:WARNING:resource_bundle.cc(304)] locale_file_path.empty()
[0826/134434:ERROR:renderer_main.cc(212)] Running without renderer sandbox
...
[0826/135650:ERROR:renderer_main.cc(212)] Running without renderer sandbox
[0826/135658:ERROR:ipc_channel_win.cc(136)] pipe error: 109
[0826/135921:ERROR:renderer_main.cc(212)] Running without renderer sandbox
...
[0826/135921:ERROR:renderer_main.cc(212)] Running without renderer sandbox
[0826/135933:ERROR:ipc_channel_win.cc(378)] pipe error: 109
[0826/135933:ERROR:ipc_channel_win.cc(412)] pipe error: 232
[0826/140141:ERROR:renderer_main.cc(212)] Running without renderer sandbox
...
[0826/140141:ERROR:renderer_main.cc(212)] Running without renderer sandbox
[0826/140148:ERROR:ipc_channel_win.cc(412)] pipe error: 232
不幸的是,如果浏览器未初始化,Load
会自动失败。下一个版本是一个主要的重写,它会抛出一个异常,所以你会立即知道发生了什么。如果挂钩 IsBrowserInitializedChanged
事件,您应该能够在它触发后安全地调用 Load。
https://github.com/cefsharp/CefSharp/blob/cefsharp/41/CefSharp.WinForms/ChromiumWebBrowser.cs#L233
撰写本文时的当前版本是 41.0.1
。
下一个版本将是 43.0.0
(nuget.org
上已经有一个 -pre
版本,尽管它还没有完全准备好迎接黄金时段)