【chrome】如何在c 中增加给javascript调用的api-凯发app官方网站

凯发app官方网站-凯发k8官网下载客户端中心 | | 凯发app官方网站-凯发k8官网下载客户端中心
  • 博客访问: 875946
  • 博文数量: 61
  • 博客积分: 2315
  • 博客等级: 大尉
  • 技术积分: 2560
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-22 18:00
文章分类

全部博文(61)

文章存档

2015年(3)

2014年(3)

2013年(9)

2012年(23)

2011年(23)

相关博文
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·

分类: web开发

2013-07-17 09:54:56

本文示例说明了如何在chrome浏览器中增加javascript api。为了简化,先假设是在已有的namespace中增加一个新的api,文章的最后将指出如果增加一下全新的namespace所需注意的事项。


在继续之前,请确保你的chrome浏览器中已安装了一些扩展程序。可以在地址栏中输入chrome://extensions查看已安装的扩展程序。下图示例说明了我的浏览器中已安装了google mail checker扩展程序,我们将使用它来测试新增的api(测试可以使用任何扩展程序,而不需指定这所示例的google mail checker)。


从上图也同时示例了如何打开chrome网上商店,我们需要进入该页面查看已开发好的api。进入页面后按f12打开开发者工具,并将开发者工具切换到控制台。


在开发者工具的控制台中,输入“chrome.management.un”其将显示management namespace所支持的api。


下面我们要做的,就是在management中增加showbutton api,用于显示或隐藏扩展栏上(某)扩展程序的icon。增加showbutton api大体上分成两大部骤。步骤一为变更c 代码,步骤二为变更management.json接口描述文件。下面逐步讲解基于chrome r28源码的具体变更内容。


首先,在src\chrome\browser\extensions\api\management\management_api.h中增加一个新类的声明。当showbutton在javascript中被调用时,该类将负责进行后续处理,其runimpl方法将会被调用。
点击(此处)折叠或打开

  1. class managementshowbuttonfunction : public managementfunction {
  2. public:
  3.   declare_extension_function("management.showbutton", management_uninstall)

  4. private:
  5.   virtual bool runimpl() override;
  6. };
接着,在src\chrome\browser\extensions\api\management\management_api.cc中增加新类的实现。runimpl方法根据javascript所传入的两个参数调用setbrowseractionvisibility函数,实现对扩展程序icon的显示和隐藏。第一个参数为扩展程序的id,第二个参数是一个布尔变量,用于指示是显示(true)抑或隐藏(false)扩展程序的icon。

点击(此处)折叠或打开

  1. bool managementshowbuttonfunction::runimpl() {
  2.   std::string extension_id;
  3.   extension_function_validate(args_->getstring(0, &extension_id));
  4.   bool enable;
  5.   extension_function_validate(args_->getboolean(1, &enable));

  6.   const extension* extension = service()->getextensionbyid(extension_id, true);
  7.   if (!extension) {
  8.     error_ = errorutils::formaterrormessage(
  9.       keys::knoextensionerror, extension_id);
  10.     return false;
  11.   }
  12.   service()->extension_prefs()->setbrowseractionvisibility(extension, enable);
  13.   return true;
  14. }
最后,我们在src\chrome\common\api\management.json中增加showbutton的描述。请注意,在该文件中存在functoins和events两大部分,一定要将新增内容放入functions部分。为了防止变更json文件时出错,可以使用notepad ,并在其上安装jslint和jsmin两个插件。在编辑完json文件后先调用plugins->jsmin->jsformat(notepad 中的菜单命令),然后是plugins->jslint->jslint current file检查是否存在错误。


点击(此处)折叠或打开

  1. {
  2.         "name" : "showbutton",
  3.         "description" : "show/hide extension icon on extension bar.",
  4.         "parameters" : [
  5.           {
  6.             "name" : "id",
  7.             "type" : "string",
  8.             "description" : "this should be the id from an item of $ref:extensioninfo."
  9.           },
  10.          {
  11.             "name" : "enabled",
  12.             "type" : "boolean",
  13.             "description" : "whether this item should be enabled or disabled."
  14.           }
  15.         ]
  16.       }
有了以上的变更后,在编译chrome项目之前,需手动重新编译api项目,因为chrome项目并不依赖于api项目。重新编译将使得在自动生成的generatedfunctionregistry:: registerall函数内增加对managementshowbuttonfunction的注册。


程序编译完成后,我们可以在开发者工具的控制台上测试showbutton函数。下图示例说明了通过调用该函数隐藏和显示google mail checker扩展程序的icon。


上面示例了如何在已存在的management namespace中增加一个api。在chrome中,javascript api的使用存在权限的概念。如果新增api的同时也需新增namespace的话,需要注意在apipermissioninfo::registerallpermissions方法中注册新增namespace的权限,否则会出现页面无法访问新增api的问题。


本文出自李云的博客,请务必保留此出处:http://blog.chinaunix.net/uid-26470037-id-3806341.html
阅读(6264) | 评论(2) | 转发(1) |
0

上一篇:

下一篇:

给主人留下些什么吧!~~
")); function link(t){ var href= $(t).attr('href'); href ="?url=" encodeuricomponent(location.href); $(t).attr('href',href); //setcookie("returnouturl", location.href, 60, "/"); }
网站地图