CEF加载PPAPI插件

最后更新于:2022-04-01 16:02:42

CEF基于Chromium和Webkit而来,支持PPAPI和NaCI。 CEF3的binary包默认已经支持PPAPI(参考[http://magpcss.org/ceforum/viewtopic.php?f=10&t=10509](http://magpcss.org/ceforum/viewtopic.php?f=10&t=10509)),以cefsimple为例(参考[**CEF Windows开发环境搭建**](http://blog.csdn.net/foruok/article/details/50468642)),可以通过命令行参数来注册PPAPI plugin,通过–url参数传递一个加载对应plugin的html页面。 下面是我测试可用的一个命令行参数 ~~~ --ppapi-out-of-process --register-pepper-plugins="D:\projects\cef_binary_3.2357.1271.g8e0674e_windows32\Release\stub.dll;application/x-ppapi-stub" --url=file:///d:/projects/cef_binary_3.2357.1271.g8e0674e_windows32/Release/stub.html ~~~ stub.html非常简单,代码如下: ~~~ <!DOCTYPE html> <html> <head> <title>stub</title> </head> <body> <embed id="plugin" type="application/x-ppapi-stub"> </body> </html> ~~~ 其中stub.dll是我编译的PPAPI SDK里的示例,做了些许改动。stub.c代码如下: ~~~ // Copyright (c) 2010 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // This is the simplest possible C Pepper plugin that does nothing. If you're // using C++, you will want to look at stub.cc which uses the more convenient // C++ wrappers. #include <stddef.h> #include <stdint.h> #include <Windows.h> #include <tchar.h> #include "ppapi/c/pp_errors.h" #include "ppapi/c/pp_module.h" #include "ppapi/c/ppb.h" #include "ppapi/c/ppp.h" #include "ppapi/c/pp_instance.h" #include "ppapi/c/ppp_instance.h" PP_Module g_module_id; PPB_GetInterface g_get_browser_interface = NULL; PP_EXPORT int32_t PPP_InitializeModule(PP_Module module_id, PPB_GetInterface get_browser_interface) { // Save the global module information for later. g_module_id = module_id; g_get_browser_interface = get_browser_interface; OutputDebugString(_T("PPP_InitializeModule was called\r\n")); return PP_OK; } PP_EXPORT void PPP_ShutdownModule() { OutputDebugString(_T("PPP_ShutdownModule was called\r\n")); } PP_EXPORT const void* PPP_GetInterface(const char* interface_name) { // You will normally implement a getter for at least PPP_INSTANCE_INTERFACE // here. return NULL; } ~~~ 如你所见,我只是使用OutputDebugString函数输出了调试信息。运行cefsimple,使用DbgView工具可以看到我们输出的信息。 关于PPAPI插件的细节,后面会有一些文章来讲。 相关文章参考: - [**CEF Windows开发环境搭建**](http://blog.csdn.net/foruok/article/details/50468642)
';