HTML5技术

【干货】Chrome插件(扩展)开发全攻略 - 我是小茗同学(2)

字号+ 作者:H5之家 来源:H5之家 2017-07-12 13:00 我要评论( )

这是因为content-script有一个很大的“缺陷”,也就是无法访问页面中的JS,虽然它可以操作DOM,但是DOM却不能调用它,也就是无法在DOM中通过绑定事件的方式调用content-script中的代码(包括直接写onclick和addEven

这是因为content-script有一个很大的“缺陷”,也就是无法访问页面中的JS,虽然它可以操作DOM,但是DOM却不能调用它,也就是无法在DOM中通过绑定事件的方式调用content-script中的代码(包括直接写onclick和addEventListener2种方式都不行),但是,“在页面上添加一个按钮并调用插件的扩展API”是一个很常见的需求,那该怎么办呢?其实这就是本小节要讲的。

在content-script中通过DOM方式向页面注入inject-script代码示例:

(jsPath) { jsPath temp .)..() ..head.appendChild(temp); }

你以为这样就行了?执行一下你会看到如下报错:

Denying load of chrome-extension://efbllncjkjiijkppagepehoekjojdclc/js/inject.js. Resources must be listed in the web_accessible_resources manifest key in order to be loaded by pages outside the extension.

意思就是你想要在web中直接访问插件中的资源的话必须显示声明才行,配置文件中增加如下:

["js/inject.js"], }

至于inject-script如何调用content-script中的代码,后面我会在专门的一个消息通信章节详细介绍。

homepage_url

开发者或者插件主页设置,一般会在如下2个地方显示:

Chrome插件的8种展示形式 browserAction(浏览器右上角)

通过配置browser_action可以在浏览器的右上角增加一个图标,一个browser_action可以拥有一个图标,一个tooltip,一个badge和一个popup。

示例配置如下:

图标

browser_action图标推荐使用宽高都为19像素的图片,更大的图标会被缩小,格式随意,一般推荐png,可以通过manifest中default_icon字段配置,也可以调用setIcon()方法。

tooltip

修改browser_action的manifest中default_title字段,或者调用setTitle()方法。

badge

所谓badge就是在图标上显示一些文本,可以用来更新一些小的扩展状态提示信息。因为badge空间有限,所以只支持4个以下的字符(英文4个,中文2个)。badge无法通过配置文件来指定,必须通过代码实现,设置badge文字和颜色可以分别使用setBadgeText()和setBadgeBackgroundColor()。

)[]});

效果:

pageAction(地址栏右侧)

所谓pageAction,指的是只有当某些特定页面打开才显示的图标,它和browserAction最大的区别是一个始终都显示,一个只在特定情况才显示。

需要特别说明的是早些版本的Chrome是将pageAction放在地址栏的最右边,左键单击弹出popup,右键单击则弹出相关默认的选项菜单:

而新版的Chrome更改了这一策略,pageAction和普通的browserAction一样也是放在浏览器右上角,只不过没有点亮时是灰色的,点亮了才是彩色的,灰色时无论左键还是右键单击都是弹出选项:

具体是从哪一版本开始改的没去仔细考究,反正知道v50.0的时候还是前者,v58.0的时候已改为后者。

调整之后的pageAction我们可以简单地把它看成是可以置灰的browserAction。

  • chrome.pageAction.show(tabId) 显示图标;
  • chrome.pageAction.hide(tabId) 隐藏图标;
  • 示例(只有打开百度才显示图标):

    ["declarativeContent"] .(){ chrome.declarativeContent.onPageChanged.addRules([ [ .) ][new chrome.declarativeContent.ShowPageAction()] } ]));

    效果图:

    右键菜单

    通过开发Chrome插件可以自定义浏览器的右键菜单,主要是通过chrome.contextMenusAPI实现,右键菜单可以出现在不同的上下文,比如普通页面、选中的文字、图片、链接,等等,如果有同一个插件里面定义了多个菜单,Chrome会自动组合放到以插件名字命名的二级菜单里,如下:

    最简单的右键菜单示例

    [.());

    效果:

    添加右键百度搜索

    [.[(params) .();

    效果如下:

    语法说明

    这里只是简单列举一些常用的,完整API参见:https://developer.chrome.com/extensions/contextMenus

    , [()).contextMenus.remove(menuItemId); .contextMenus.update(menuItemId, updateProperties);

    override(覆盖特定页面)

    使用override页可以将Chrome默认的一些特定页面替换掉,改为使用扩展提供的页面。

    扩展可以替代如下页面:

    注意:

    下面的截图是默认的新标签页和被扩展替换掉的新标签页。

    代码(注意,一个插件只能替代一个默认页,以下仅为演示):

    devtools(开发者工具) 预热

    使用过vue的应该见过这种类型的插件:

     

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • HTML5视频播放插件 - 释怀我的诺亚尔

      HTML5视频播放插件 - 释怀我的诺亚尔

      2017-07-08 18:00

    • 架构师之路--谈架构师的基本素养和[干货]日志处理 - 静儿1986

      架构师之路--谈架构师的基本素养和[干货]日志处理 - 静儿1986

      2017-05-28 09:10

    • 详解Google Chrome浏览器(操作篇)(下) - Alan_beijing

      详解Google Chrome浏览器(操作篇)(下) - Alan_beijing

      2017-05-16 13:00

    • vue.js 初体验— Chrome 插件开发实录 - 腾讯云技术社区

      vue.js 初体验— Chrome 插件开发实录 - 腾讯云技术社区

      2017-05-13 13:00

    网友点评