chrome如何添加一个extension的api
来源:互联网 发布:哪个大学有网络公开课 编辑:程序博客网 时间:2024/04/29 09:16
转自:http://blog.csdn.net/gensmusic/article/details/27089541
这里演示的是如何在chrome里添加一个extensions的api.
先看下需求:
平时做过插件的人都用过 chrome.XXx ,现在我们想自己来做个,让其在插件的js运行时候可以调用,并且在c++的代码里执行一些特殊的代码。
参考: http://dev.chromium.org/developers/design-documents/extensions/proposed-changes/creating-new-apis
其实按照google上面的文档就可以了,但是有些地方不详细,所以这里才会细致的一些来写一下步骤。
假设我们的api叫 egg,里面有一个函数 pain, 使用的时候 chrome.egg.pain()
1. 在 chrome/common/extensions/api/ 下面增加描述文件,这里有2种方式,一个是用IDL,另外一个是JSON的方式
IDL方式: egg.idl
- //
- [permissions=egg]
- namespace egg{
- callback eggCallback = void(DOMString result);
- interface Functions {
- static void post(DOMString input, eggCallback callback);
- };
- };
permissions=egg 意思是别人在使用你的时候,应该加的名字,比如,你在写插件的时候,在manifest.json 里面的 "permissions":["http://*/","storage"], 别人在用这个api的时候,就可以写 "permissions":["http://*/","storage", "egg"]
2. 在 chrome/common/extensions/api/api.gyp 里加上我们刚加的 文件
- 'dns.idl',
- 'egg.idl',
- 'downloads.idl',
3. 要告诉 extension架构,我们加了一个 egg的api
3.1 chrome/common/extensions/api/_permission_features.json
- "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
- "min_manifest_version": 2
- },
- "egg": {
- "channel": "stable",
- "extension_types": ["extension", "platform_app"]
- },
- "alwaysOnTopWindows": [
- {
- "channel": "dev",
3.2 chrome/common/extensions/api/_api_features.json
- "contexts": ["blessed_extension"],
- "dependencies": ["permission:app.runtime"]
- },
- "egg": {
- "contexts": ["blessed_extension"],
- "dependencies": ["permission:egg"]
- },
- "app.window": {
- "noparent": true,
- "contexts": ["blessed_extension"],
3.3 extensions/common/permissions/api_permission.h #注意目录目前是在 src/extensions,跟上面的不一样,跟下面也不一样
- kAdView,
- kAlarms,
- kEgg,
- kAlwaysOnTopWindows,
- kAppCurrentWindowInternal,
3.4 chrome/common/extensions/permissions/chrome_api_permissions.cc
- { APIPermission::kActiveTab, "activeTab" },
- { APIPermission::kAdView, "adview" },
- { APIPermission::kAlarms, "alarms" },
- { APIPermission::kEgg, "egg" },
- { APIPermission::kBookmark, "bookmarks", APIPermissionInfo::kFlagNone,
- IDS_EXTENSION_PROMPT_WARNING_BOOKMARKS,
- PermissionMessage::kBookmarks },
chrome/browser/extensions/extension_function_histogram_value.h,目前该文件已经迁移到extensions\browser目录
- MEDIAGALLERIES_GETMETADATA,
- INPUT_IME_SENDKEYEVENTS,
- VIRTUALKEYBOARDPRIVATE_LOCKKEYBOARD,
- EGG_PAIN,
- ENUM_BOUNDARY // Last entry: Add new entries above.
chrome/browser/extensions/api/egg/egg_api.h
- #include "chrome/common/extensions/api/egg.h" //这个自动生成的头文件,加上就行
- #include "chrome/browser/extensions/chrome_extension_function.h"
- namespace extensions {
- class EggPainFunction : public AsyncExtensionFunction {
- public:
- EggPainFunction();
- virtual bool RunImpl() OVERRIDE;
- protected:
- virtual ~EggPainFunction() {}
- private:
- DECLARE_EXTENSION_FUNCTION("egg.pain", DAFEI_POST);
- };
- }
- #include "egg_api.h"
- #include "base/logging.h"
- #include "sys/types.h"
- #include "unistd.h"
- namespace extensions {
- namespace egg = api::egg;
- EggPainFunction::EggPainFunction() {}
- bool EggPainFunction::RunImpl() {
- scoped_ptr<egg::Pain::Params> params(
- egg::Pain::Params::Create(*args_));
- EXTENSION_FUNCTION_VALIDATE(params.get());
- std::string tmp = "egg in process:";
- char buf[20] = {0};
- sprintf(buf, "%d", getpid());
- tmp.append(std::string(buf));
- LOG(INFO) << tmp;
- WriteToConsole(content::CONSOLE_MESSAGE_LEVEL_WARNING, tmp);
- return true;
- }
- }
加到gypi里 chrome/chrome_browser_extensions.gypi
- 'browser/extensions/api/alarms/alarm_manager.h',
- 'browser/extensions/api/alarms/alarms_api.cc',
- 'browser/extensions/api/alarms/alarms_api.h',
- 'browser/extensions/api/egg/egg_api.h',
- 'browser/extensions/api/egg/egg_api.cc',
- 'browser/extensions/api/app_current_window_internal/app_current_window_internal_api.cc',
- 'browser/extensions/api/app_current_window_internal/app_current_window_internal_api.h',
- 'browser/extensions/api/app_runtime/app_runtime_api.cc',
5.好了,现在去编译就OK了
0 0
- chrome如何添加一个extension的api
- chrome如何添加一个extension的api
- 如何做一个简单的Chrome Extension用于网页截屏
- 如何导出Chrome已安装的某扩展Extension App
- 如何导出Chrome已安装的某扩展Extension App
- 关于chrome.extension如何取得pageAction的title
- chrome extension 遇到的问题
- chrome extension 如何保存图片到本地
- Chrome Extension
- chromium如何以json方式新增extension API以及添加内部扩展
- Install chrome extension
- chrome extension 开发
- chrome extension develope(1)
- chrome extension(2)
- Chrome Extension for Securityoverride
- chrome 常用 extension
- chrome extension 调试方式
- Chrome 浏览器 extension 指南
- HOJ 12926 Janeway’s Journey(斜率排序)
- 【CEF】 VC应用程序让JS代码能够调用C++方法
- 魔兽争霸war3心得体会(三):UD内战
- C语言取整方法
- ArcGIS教程:任务助手管理器的新特性
- chrome如何添加一个extension的api
- 免费短信验证码SDK For iOS V1.0.4 版本发布
- LeetCode Palindrome Number 判断回文数字高效实现
- 2015年计算机校招笔试面试经验
- 百度收录浮动的原因详解
- dubbo的安装和使用
- mysql 常用SQL语句和命令
- 精灵并行执行2个动作,执行完后,移除
- Spring 学习记录 2 Spring的依赖注入