在使用 CefSharp 内置谷歌浏览器时,如果出现白屏的情况,可能是由以下几个原因导致的:
1 CefSharp 版本冲突:如果你的 CefSharp 版本与内置谷歌浏览器的版本不匹配,就可能出现白屏的问题。建议更新到最新版本。
2 缺少必要的依赖库:CefSharp 需要依赖一些第三方库文件,如果你没有正确安装或配置这些依赖库,就可能出现白屏。建议按照官方文档进行安装和配置。
3 硬件加速问题:CefSharp 默认启用硬件加速功能,但并不适用于所有设备,某些低端设备可能无法正常显示页面。可以尝试禁用硬件加速功能,方法是在 CefSettings 中设置“cefCefSettingsCefCommandLineArgsAdd("disable-gpu", "1")”。
4 其他问题:白屏还可能和网络连接、DNS 解析等问题有关。可以检查网络连接是否正常,是否存在 DNS 解析问题等。
如果以上方法都无法解决问题,建议在 CefSharp 的官方论坛上提问,并提供详细的错误日志和代码片段,以便其他人更好地帮助你解决问题。
Application Structure
应用程序结构
Every CEF3 application has the same general structure
Provide an entry-point function that initializes CEF and runs either sub-process executable logic or the CEF message loop
Provide an implementation of CefApp to handle process-specific callbacks
Provide an implementation of CefClient to handle browser-instance-specific callbacks
Call CefBrowserHost::CreateBrowser() to create a browser instance and manage the browser life span using CefLifeSpanHandler
每个CEF3应用程序都是相同的结构
提供入口函数,用于初始化CEF、运行子进程执行逻辑或者CEF消息循环。
提供CefApp实现,用于处理进程相关的回调。
提供CefClient实现,用于处理browser实例相关的回调
执行CefBrowserHost::CreateBrowser()创建一个browser实例,使用CefLifeSpanHandler管理browser对象生命周期。
Entry-Point Function
入口函数
As described in the “Processes” section a CEF3 application will run multiple processes The processes can all use the same executable or a separate executable can be specified for the sub-processes Execution of the process begins in the entry-point function Complete platform-specific examples for Windows, Linux and Mac OS-X are available in cefclient_wincc, cefclient_gtkcc and cefclient_macmm respectively
像本文中进程章节描述的那样,一个CEF3应用程序会运行多个进程,这些进程能够使用同一个执行器或者为子进程定制的、单独的执行器。进程的执行从入口函数开始,示例cefclient_wincc、cefclient_gtkcc、cefclient_macmm分别对应Windows、Linux和Mac OS-X平台下的实现。
When launching sub-processes CEF will specify configuration information using the command-line that must be passed into the CefExecuteProcess function via the CefMainArgs structure The definition of CefMainArgs is platform-specific On Linux and Mac OS X it accepts the argc and argv values which are passed into the main() function
当执行子进程是,CEF将使用命令行参数指定配置信息,这些命令行参数必须通过CefMainArgs结构体传入到CefExecuteProcess函数。CefMainArgs的定义与平台相关,在Linux、Mac OS X平台下,它接收main函数传入的argc和argv参数值。
CefMainArgs main_args(argc, argv);
On Windows it accepts the instance handle (HINSTANCE) which is passed into the wWinMain() function The instance handle is also retrievable via GetModuleHandle(NULL)
在Windows平台下,它接收wWinMain函数传入的参数:实例句柄(HINSTANCE),这个实例能够通过函数GetModuleHandle(NULL)获取。
CefMainArgs main_args(hInstance);
Single Executable
单个执行器
When running as a single executable the entry-point function is required to differentiate between the different process types The single executable structure is supported on Windows and Linux but not on Mac OS X
当运行单个执行器时,根据不同的进程类型,入口函数有差异。Windows、Linux平台支持单个执行器架构,Mac OS X平台则不行。
// 程序执行函数int main(int argc, char argv[]) { // Structure for passing command-line arguments // The definition of this structure is platform-specific // 传递命令行参数的结构体。 // 这个结构体的定义与平台相关。 CefMainArgs main_args(argc, argv); // Optional implementation of the CefApp interface // 可选择地实现CefApp接口 CefRefPtr<MyApp> app(new MyApp); // Execute the sub-process logic, if any This will either return immediately for the browser // process or block until the sub-process should exit // 可能会执行子进程逻辑,这个函数的执行在browser进程时会立即返回,在子进程时会堵塞直到退出时返回。 int exit_code = CefExecuteProcess(main_args, appget()); if (exit_code >= 0) { // The sub-process terminated, exit now // 子进程被终结,立即结束。 return exit_code; } // Populate this structure to customize CEF behavior // 填充这个结构体,用于定制CEF的行为。 CefSettings settings; // Initialize CEF in the main process // 在main进程中初始化CEF CefInitialize(main_args, settings, appget()); // Run the CEF message loop This will block until CefQuitMessageLoop() is called // 执行消息循环,此时会堵塞,直到CefQuitMessageLoop()函数被调用。 CefRunMessageLoop(); // Shut down CEF // 退出CEF。 CefShutdown(); return 0;}
Separate Sub-Process Executable
单独子进程执行器
When using a separate sub-process executable you need two separate executable projects and two separate entry-point functions
当使用一个单独子进程执行器时,你需要2个分开的可执行工程和2个分开的入口函数。
Main application entry-point function:
主程序的入口函数:
// Program entry-point function// 程序入口函数int main(int argc, char argv[]) { // Structure for passing command-line arguments // The definition of this structure is platform-specific // 传递命令行参数的结构体。 // 这个结构体的定义与平台相关。 CefMainArgs main_args(argc, argv); // Optional implementation of the CefApp interface // 可选择性地实现CefApp接口 CefRefPtr<MyApp> app(new MyApp); // Populate this structure to customize CEF behavior // 填充这个结构体,用于定制CEF的行为。 CefSettings settings; // Specify the path for the sub-process executable // 指定子进程的执行路径 CefString(&settingsbrowser_subprocess_path)FromASCII(“/path/to/subprocess”); // Initialize CEF in the main process // 在主进程中初始化CEF CefInitialize(main_args, settings, appget()); // Run the CEF message loop This will block until CefQuitMessageLoop() is called // 执行消息循环,此时会堵塞,直到CefQuitMessageLoop()函数被调用。 CefRunMessageLoop(); // Shut down CEF // 关闭CEF CefShutdown(); return 0;}
Sub-process application entry-point function: 子进程程序的入口函数:
// Program entry-point function// 程序入口函数int main(int argc, char argv[]) { // Structure for passing command-line arguments // The definition of this structure is platform-specific // 传递命令行参数的结构体。 // 这个结构体的定义与平台相关。 CefMainArgs main_args(argc, argv); // Optional implementation of the CefApp interface // 可选择性地实现CefApp接口 CefRefPtr<MyApp> app(new MyApp); // Execute the sub-process logic This will block until the sub-process should exit // 执行子进程逻辑,此时会堵塞直到子进程退出。 return CefExecuteProcess(main_args, appget());}
Message Loop Integration
集成消息循环
CEF can also integrate with an existing application message loop instead of running its own message loop There are two ways to do this
CEF可以不用它自己提供的消息循环,而与已经存在的程序中消息环境集成在一起,有两种方式可以做到:
Call CefDoMessageLoopWork() on a regular basis instead of calling CefRunMessageLoop() Each call to CefDoMessageLoopWork() will perform a single iteration of the CEF message loop Caution should be used with this approach Calling the method too infrequently will starve the CEF message loop and negatively impact browser performance Calling the method too frequently will negatively impact CPU usage
Set CefSettingsmulti_threaded_message_loop = true (Windows only) This will cause CEF to run the browser UI thread on a separate thread from the main application thread With this approach neither CefDoMessageLoopWork() nor CefRunMessageLoop() need to be called CefInitialize() and CefShutdown() should still be called on the main application thread You will need to provide your own mechanism for communicating with the main application thread (see for example the message window usage in cefclient_wincpp) You can test this mode in cefclient on Windows by running with the “--multi-threaded-message-loop” command-line flag
周期性执行CefDoMessageLoopWork()函数,替代调用CefRunMessageLoop()。CefDoMessageLoopWork()的每一次调用,都将执行一次CEF消息循环的单次迭代。需要注意的是,此方法调用次数太少时,CEF消息循环会饿死,将极大的影响browser的性能,调用次数太频繁又将影响CPU使用率。
cef设置透明 *** 作方法:
1、使用setWindowFlags将对话框自带的边框去除,使用我们自定义的边框。
2、使用setAttribute,为了使透明效果生效。
3、登录框中嵌入了cef页面进行扫描登录。经过调试,这三个条件出现了互斥,使用了第二个之后,cef界面就显示不出来。不使用第二个,cef页面可以加载,但是阴影就是一团黑色。如果第一条不去除边框,阴影可以使用,cef页面也可以正常显示,但是就不可以定制边框。
朋友 ,有结果吗,我也是碰到了这个问题。这个页面JS调用C++,C++调用页面JS一般是要通过com接口的。在IE的webbrowser里我可以调用成功。在cef里还没有好的方法。给个链接共同学习>
首先打开电脑,找到电脑中的浏览器并点击进入,在浏览器搜索栏中输入“cefflashbrowser”进入官网。
2、进入官网以后点击页面上的“其他平台版本”选项。
3、进入其他平台版本窗口后,选择自己想要安装的系统和版本。
4、完成插件下载以后,在电脑资源管理器中找到安装程序,并双击安装程序进行安装。
5、在出现的页面中点击右下角“开始安装”按钮即可。
以上就是关于cefsharp内置谷歌浏览器白屏全部的内容,包括:cefsharp内置谷歌浏览器白屏、访问tomcat8080 为什么进入了 cef remote debugging、cef设置透明等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)