在谷歌浏览器中点击设置,地址栏里出现的不是普通网址,而是chrome://settings/

这个地址就是谷歌浏览器的自定义scheme,cef也提供了自定义协议手段。主要是通过

以下几步:

1.继承一个工厂类MySchemeHandlerFactory : public CefSchemeHandlerFactory

需要包含#include "include/cef_scheme.h"

class MySchemeHandlerFactory : public CefSchemeHandlerFactory
{
public:
virtual CefRefPtr<CefResourceHandler> Create(CefRefPtr<CefBrowser> browser,
CefRefPtr<CefFrame> frame,
const CefString& scheme_name,
CefRefPtr<CefRequest> request)
OVERRIDE {
// Return a new resource handler instance to handle the request.
return new MyResourceHandler();
}
private:
IMPLEMENT_REFCOUNTING(MySchemeHandlerFactory);
};

2.继承一个资源类class MyResourceHandler : public CefResourceHandler

class MyResourceHandler : public CefResourceHandler
{
public:
MyResourceHandler() {} virtual bool ProcessRequest(CefRefPtr<CefRequest> request,
CefRefPtr<CefCallback> callback)
OVERRIDE {
std::string url = request->GetURL(); //if (strstr(url.c_str(), "handler.html") != NULL)
data_ = "hello cef";//返回到页面中的内容
callback->Continue();//这个一定要有
return true;//
} virtual void GetResponseHeaders(CefRefPtr<CefResponse> response,
int64& response_length,
CefString& redirectUrl) OVERRIDE {
response->SetMimeType("text/html");
response->SetStatus();
response_length = data_.length() ;
} virtual void Cancel() OVERRIDE {
// Cancel the response...
} virtual bool ReadResponse(void* data_out,
int bytes_to_read,
int& bytes_read,
CefRefPtr<CefCallback> callback)
OVERRIDE {
int size =static_cast<int>(data_.length());
memcpy(data_out, data_.c_str(), size);
bytes_read = size;
return true;
} private:
std::string data_;
IMPLEMENT_REFCOUNTING(MyResourceHandler);
};

3.在初始化cef那几行代码后面增加一句

CefRegisterSchemeHandlerFactory("sin", "test", new MySchemeHandlerFactory());

    CefSettings settings;
CefSettingsTraits::init(&settings);
settings.multi_threaded_message_loop = true;
CefRefPtr<SimpleApp> app(new SimpleApp);
CefInitialize(main_args, settings, app.get(), sandbox_info);
//自定义scheme
CefRegisterSchemeHandlerFactory("sin", "test", new MySchemeHandlerFactory());

4.我看有的教程里写的还要在自定义的CefApp类中修改OnRegisterCustomSchemes函数,增加

registrar->AddCustomScheme("sin", true, false, false, false, true, false);

但是我添加还是不添加都没有问题,都可以出来。

5.这时,运行程序,在地址栏输入sin://test之后就会显示页面,内容是hello cef

6.在第2步中,如果不注释if语句if (strstr(url.c_str(), "handler.html") != NULL)

那么,就需要输入sin://test/handler.html才能显示内容hello cef

在cef中使用自定义协议(scheme)的更多相关文章

  1. 自定义 URL Scheme 完全指南

    本文由 Migrant 翻译自 The Complete Tutorial on iOS/iPhone Custom URL Schemes,转载请注明出处. 注意: 自从自定义 URL 的引入,本文 ...

  2. C#综合揭秘——通过修改注册表建立Windows自定义协议

    引言 本文主要介绍注册表的概念与其相关根项的功能,以及浏览器如何通过连接调用自定义协议并与客户端进行数据通信.文中讲及如何通过C#程序.手动修改.安装项目等不同方式对注册表进行修改.其中通过安装项目对 ...

  3. 自定义 URL Scheme 完全指南(转载)

    iPhone / iOS SDK 最酷的特性之一就是应用将其自身”绑定”到一个自定义 URL scheme 上,该 scheme 用于从浏览器或其他应用中启动本应用. 注册自定义 URL Scheme ...

  4. java-cef系列视频第四集:自定义协议

    上一集我们介绍了如何为java-cef添加flashplayer支持. 本视频介绍java-cef中的自定义协议 本作品采用知识共享署名-非商业性使用-禁止演绎 3.0 中国大陆许可协议进行许可.

  5. 【转】C#综合揭秘——通过修改注册表建立Windows自定义协议

    引言 本文主要介绍注册表的概念与其相关根项的功能,以及浏览器如何通过连接调用自定义协议并与客户端进行数据通信.文中讲及如何通过C#程序.手动修改.安装项目等不同方式对注册表进行修改.其中通过安装项目对 ...

  6. 自定义URL Scheme完全指南

    iPhone / iOS SDK 最酷的特性之一就是应用将其自身”绑定”到一个自定义 URL scheme 上,该 scheme 用于从浏览器或其他应用中启动本应用. 注册自定义 URL Scheme ...

  7. 通过修改注册表建立Windows自定义协议

    引言 本文主要介绍注册表的概念与其相关根项的功能,以及浏览器如何通过连接调用自定义协议并与客户端进行数据通信.文中讲及如何通过C#程序.手动修改.安装项目等不同方式对注册表进行修改.其中通过安装项目对 ...

  8. iOS 自定义 URL Scheme 完全指南

    http://www.cocoachina.com/industry/20140522/8514.html “”   阅读器 自定义URL Scheme 本文转自Migrant的博客,原文:<T ...

  9. CEF 自定义用户协议(scheme)实现以二进制流的方式显示图片、视频、音频

    转载:https://www.cnblogs.com/sinceret/p/10417941.html 转载:https://stackoverflow.com/questions/48811756/ ...

随机推荐

  1. 11.9luffycity(4)

    2018-11-9 17:57:09 明天开始自己独立写luffy部分表的接口, 越努力,越幸运!永远不要高估自己! 明天后天先不想下看视频,把接口做完,然后整理一下笔记,温故而习之,可以为师啊! 知 ...

  2. react material-ui 添加jss插件

    jss.config.js import { create } from "jss"; import preset from "jss-preset-default&qu ...

  3. Java 8 中的方法引用

    一.原理概要 lambda 表示式,可以作为某些匿名内部类的替代.主要目的是调用该内部类中的方法,而该方法的实现(重写)由 lambda表示式决定. 通常,我们可能不关心匿名内部类中的具体方法(被重写 ...

  4. 三、CSS语言

    CSS语言 1.概述:CSS (Cascading Style Sheets)是层叠样式表用来定义网页的显示效果.可以解决html代码对样式定义的重复,提高了后期样式代码的可维护性,并增强了网页的显示 ...

  5. Java中的日期格式转化

    package lianxi; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util ...

  6. win10下Redis安装

    环境:win64 1.因为Redis官方不支持Windows,所在只能在GitHub上下载,下载地址:https://github.com/ServiceStack/redis-windows/blo ...

  7. ssm项目中KindEditor的图片上传插件,浏览器兼容性问题

    解决办法: 原因:使用@ResponseBody注解返回java对象,在浏览器中是Content-Type:application/json;charset=UTF-8 我们需要返回字符串(Strin ...

  8. 解锁scott用户

    具体操作步骤如下: C:> sqlplus 请输入用户名:sys 输入口令:sys as sysdba //注意:在口令这里输入的密码后面必须要跟上 as sysdba 才可以. SQL> ...

  9. Jedis简介

    实际开发中,我们需要用Redis的连接工具连接Redis然后操作Redis, 对于主流语言,Redis都提供了对应的客户端: https://redis.io/clients https://redi ...

  10. git常用命令--tag

    /// 查看标签 // 打印所有标签 git tag // 打印符合检索条件的标签 git tag -l 1.*.* // 查看对应标签状态 git checkout 1.0.0 /// 创建标签(本 ...