您当前的位置: 首页 >  架构

插件开发

暂无认证

  • 5浏览

    0关注

    492博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

libcef-框架架构中概念介绍-消息循环-Cef设置-CefBrowser 和 CefFrame(三)

插件开发 发布时间:2022-03-19 07:20:00 ,浏览量:5

文章目录
    • 1.消息循环集成
    • 2.Cef设置
    • 3.CefBrowser 和 CefFrame
    • 4.作者答疑

1.消息循环集成

  CEF 还可以与现有的应用程序消息循环集成,而不是运行自己的消息循环。有两种方法可以做到这一点。

  • 定期调用 CefDoMessageLoopWork() 而不是调用 CefRunMessageLoop()。每次调用 CefDoMessageLoopWork() 都会执行一次 CEF 消息循环迭代。这种方法应谨慎使用。过于频繁地调用该方法会使 CEF 消息循环不足,并对浏览器性能产生负面影响。过于频繁地调用该方法会对 CPU 使用率产生负面影响。
  • 设置 CefSettings.multi_threaded_message_loop = true(仅限 Windows)。这将导致 CEF 在与主应用程序线程不同的线程上运行浏览器 UI 线程。使用这种方法既不需要调用 CefDoMessageLoopWork() 也不需要调用 CefRunMessageLoop()。CefInitialize() 和 CefShutdown() 仍应在主应用程序线程上调用。您将需要提供自己的与主应用程序线程通信的机制(例如参见 cefclient_win.cpp 中的消息窗口用法)。您可以在 Windows 上的 cefclient 中通过使用“–multi-threaded-message-loop”命令行标志运行来测试此模式。
2.Cef设置

  CefSettings 结构允许配置应用程序范围的 CEF 设置。一些常用的配置成员包括:

  • browser_subprocess_path将为子进程启动的单独可执行文件的路径。有关更多信息,请参阅“单独的子流程可执行文件”部分。
  • multi_threaded_message_loop设置为 true 以使浏览器进程消息循环在单独的线程中运行。有关更多信息,请参阅“消息循环集成”部分。
  • command_line_args_disabled设置为 true 以禁用使用标准 CEF 和 Chromium 命令行参数的浏览器进程功能配置。有关更多信息,请参阅“命令行参数”部分。
  • cache_path缓存数据将存储在磁盘上的位置。如果为空,内存缓存将用于某些功能,而临时磁盘缓存将用于其他功能。如果指定了缓存路径,则 HTML5 数据库(例如 localStorage)将仅在会话之间持续存在。
  • locale将传递给 Blink 的语言环境字符串。如果为空,将使用“en-US”的默认语言环境。该值在 Linux 上被忽略,其中区域设置是使用环境变量解析确定的,优先顺序为:LANGUAGE、LC_ALL、LC_MESSAGES 和 LANG。也可以使用“lang”命令行开关进行配置。
  • log_file用于调试日志的目录和文件名。如果为空,将使用默认名称“debug.log”并将文件写入应用程序目录。也可以使用“日志文件”命令行开关进行配置。
  • log_severity日志严重性。只会记录此严重性级别或更高级别的消息。也可以使用“log-severity”命令行开关进行配置,其值为“verbose”、“info”、“warning”、“error”、“error-report”或“disable”。
  • resources_dir_path资源目录的完全限定路径。如果此值为空,则 cef.pak 和/或 devtools_resources.pak 文件必须位于 Windows/Linux 上的模块目录或 MacOS 上的应用程序包资源目录中。也可以使用“resources-dir-path”命令行开关进行配置。
  • locales_dir_path locales 目录的完全限定路径。如果此值为空,则语言环境目录必须位于模块目录中。这个值在 MacOS 上被忽略,其中包文件总是从应用程序包资源目录加载。也可以使用“locales-dir-path”命令行开关进行配置。
  • remote_debugging_port设置为 1024 到 65535 之间的值以在指定端口上启用远程调试。例如,如果指定了 8080,则远程调试 URL 将为 http://localhost:8080。可以从任何 CEF 或 Chrome 浏览器窗口远程调试 CEF。也可以使用“远程调试端口”命令行开关进行配置。
3.CefBrowser 和 CefFrame

  CefBrowser和CefFrame对象用于将命令发送到浏览器,并在回调方法检索其状态信息。每个 CefBrowser 对象将有一个代表顶级框架的主 CefFrame 对象和代表子框架的零个或多个 CefFrame 对象。例如,加载两个 iframe 的浏览器将具有三个 CefFrame 对象(顶级框架和两个 iframe)。在浏览器主框架中加载 URL:

browser->GetMainFrame()->LoadURL(some_url);

  浏览器后退:

browser->GoBack();

  获取网页html内容:

// Implementation of the CefStringVisitor interface.
class Visitor : public CefStringVisitor
{
public:
    Visitor() {}

    // Called asynchronously when the HTML contents are available.
    virtual void Visit(const CefString &string) OVERRIDE
    {
        // Do something with |string|...
    }

    IMPLEMENT_REFCOUNTING(Visitor);
};

browser->GetMainFrame()->GetSource(new Visitor());

  CefBrowser 和 CefFrame 对象存在于浏览器进程和渲染进程中。可以通过 CefBrowser::GetHost() 方法在浏览器进程中控制主机行为。例如,可以按如下方式检索窗口浏览器的本机句柄:

// CefWindowHandle is defined as HWND on Windows, NSView* on MacOS
// and GtkWidget* on Linux.
CefWindowHandle window_handle = browser->GetHost()->GetWindowHandle();

  其他方法可用于历史导航、加载字符串和请求、发送编辑命令、检索文本/html 内容等。有关受支持方法的完整列表,请参阅文档。

4.作者答疑

  如有疑问,请留言。

关注
打赏
1665481431
查看更多评论
立即登录/注册

微信扫码登录

0.0722s