Google Chrome浏览器扩展的架构

1) 不可视的background页面

Google Chrome扩展往往包含一个不可见的background页面,Google Chrome扩展的主要业务逻辑都位于此。有两种类型的background 页面,一种是persistent background pages,另一种是event pages。Persistent background pages持续运行,随时可访问。而Event pages是事件驱动运行的,只有在事件发生的时候才可以访问。

Persistent background pages默认加载入内存,持续运行在后台。在manifest.json文中注册Persistent background page如下:

{

"background": {

"scripts": [myBackgroundPage.js],

"persistent": true

]

}

Event pages默认是不加载的,只在事件发生时加载并运行。触发加载Event pages的场景如下:

· Google Chrome扩展第一次被安装或升级到新版本

· 发生了Event pages监听的事件

· content script或其他Google Chrome扩展发出了一个message

· Google Chrome扩展中的其他页面调用了chrome.runtime.getBackgroundPage()方法

Google Chrome扩展通过chrome.runtime.onInstalled.addListener(onInit)要求监听onInstalled事件,Chrome浏览器跟踪当前发生的所有事件。一旦被监听的事件发生,Chrome浏览器就会加载Event pages。

如果Google Chrome扩展通过removeListener取消了对某事件的监听,则该事件发生时Chrome浏览器也不会加载Event pages。

当事件不再被监听器引用后卸载以释放内存并发出chrome.runtime.onSuspend事件。

在manifest.json文中注册Event page如下:

{

"background": {

"scripts": [myEventPage.js],

"persistent": false

]

}

2) 可视页面

Google Chrome扩展可以完全运行在后台,也可以为用户提供可视界面。Google Chrome扩展最常用的可视界面为如下两种形式(两者是互斥的):

· browser actions,这样的Google Chrome扩展可以适用于任何页面。图标往往位于浏览器地址栏右侧。点击图标将弹出窗口。

· page actions,这样的Google Chrome扩展只能作用于某一页面,当打开该页面时触发该Google Chrome扩展,关闭页面则Google Chrome扩展也随之消失。图标往往位于浏览器地址栏右端。

此外,Google Chrome扩展还支持其他的可视界面:

· context menu,右键菜单

· options 页面,Google Chrome扩展可以有一个options 页面,支持用户定制Chrome扩展的运行参数。

· override页面,Google Chrome扩展中的override页面可以替换浏览器中打开的默认页面,如标签管理器页面chrome://bookmarks、浏览历史记录页面chrome://bookmarks或新建Tab页面chrome://bookmarks。不过,一个Google Chrome扩展只能替换一个默认页面。

· 通过chrome.tabs.create()或window.open()打开的页面

3) Google Chrome扩展与Web页面/服务器之间的交互

· 通过content scripts,可以实现Google Chrome扩展与用户打开的Web页面之间的交互。

· 通过跨域的 XMLHttpRequest,可以实现Google Chrome扩展与其他服务器之间的交互。

content scripts是一组JavaScript文件,运行在浏览器当前打开的页面的上下文中,可以读取并修改当前打开的页面DOM结构。事实上,content scripts可以被看作是当前打开的页面的组成部分。

4) 使用chrome.* API

Google Chrome扩展除了使用JavaScript的通用标准API之外,还可以使用Chrome浏览器专有的API(称为chrome.* API).

不过,大多数chrome.* API都是异步调用,调用之后立即返回而不等待调用结果,所以对chrome.* API的调用往往都需要一个回调函数作为参数以处理调用结果。

当然,也有少量chrome.* API是同步调用。这样的chrome.* API往往都有一个返回类型,也无需回调函数作为参数。

5) Google Chrome扩展中的页面之间的数据通信

Google Chrome扩展中的不同页面之间往往要通信,以调用彼此方法共享数据。由于一个Google Chrome扩展中的所有页面都运行于同一个进程中的同一个线程,所以各个页面可以通过一定的方法直接调用。

如通过chrome.extension.getViews()获得所有可视页面的window对象的数组,通过chrome.extension.getBackgroundPage()获得不可视的background页面的window对象。通过页面的window对象就可以对页面的DOM进行任何操作。

时间: 2024-12-31 06:24:38

Google Chrome浏览器扩展的架构的相关文章

Google Chrome浏览器扩展的调试

1)      查看扩展程序的详细信息和ID 通过Chrome 浏览器的“ 工具->更多工具->扩展程序”,打开chrome://extensions页面,选中右上角的“开发者模式”,可以查看扩展程序的详细信息(如名称.概述.占用空间大小.版本和权限等)和ID. 2)      查看扩展程序的popup页面 通过Chrome 浏览器的“工具 ->更多工具->扩展程序”,打开chrome://extensions页面,选中右上角的“开发者模式”(必须在开发者模式下才能够看到调试菜单项

Chrome浏览器扩展开发系列之八:Chrome扩展的数据存储

Google Chrome浏览器扩展可以使用如下任何一种存储机制: HTML5的localStorage API实现的本地存储(此处略) Google的chrome.storage.* API实现的浏览器存储 Google的chrome.cookies.* API实现的cookie存储 1) chrome.storage API实现的浏览器存储 Chrome浏览器扩展通过chrome.storage.* API,可以存取数据或监听数据的变化. 在manifest.json文件中注册storage

Chrome浏览器扩展开发系列之十四:本地消息机制Native messagin

Chrome浏览器扩展开发系列之十四:本地消息机制Native messaging 2016-11-24 09:36 114人阅读 评论(0) 收藏 举报  分类: PPAPI(27)  通过将浏览器所在客户端的本地应用注册为Chrome浏览器扩展的"本地消息主机(native messaging host)",Chrome浏览器扩展还可以与客户端本地应用之间收发消息. 客户端的本地应用注册为Chrome浏览器扩展的"本地消息主机"之后,Chrome浏览器会在独立的

Chrome浏览器扩展开发系列之十四

Chrome浏览器扩展开发系列之十四:本地消息机制Native messaging 时间:2015-10-08 16:17:59      阅读:1361      评论:0      收藏:0      [点我收藏+] 通过将浏览器所在客户端的本地应用注册为Chrome浏览器扩展的"本地消息主机(native messaging host)",Chrome浏览器扩展还可以与客户端本地应用之间收发消息. 客户端的本地应用注册为Chrome浏览器扩展的"本地消息主机"

Chrome浏览器扩展开发系列之十二:Content Scripts

Content Scripts是运行在Web页面的上下文的JavaScript文件.通过标准的DOM,Content Scripts 可以操作(读取并修改)浏览器当前访问的Web页面的内容. Content Scripts通常用于如下场景: 找到Web页面中的无效链接并修复 增大字体以突出显示 查找并处理DOM中的microformat Content Scripts的使用限制条件: 不能访问如下chrome.* API chrome.extension API chrome.i18n API

Chrome浏览器扩展程序强制停用的解决方法

http://blog.csdn.net/pipisorry/article/details/37728839 一.加载正在开发的扩展程序 这里以加载一个已有的Chrome扩展程序为例: 把已有的扩展程序(.crx文件)后缀改为.zip,就可以把它解压缩到某个目录,比如将lingoes_chrome_2.1.crx改成lingoes_chrome_2.1.zip并解压到D:\Downloads\Editor\lingoes_chrome_2.1.zip 打开谷歌浏览器 - 工具 - 扩展程序 -

Chrome浏览器扩展开发系列之十四:本地消息机制Native messaging

通过将浏览器所在客户端的本地应用注册为Chrome浏览器扩展的“本地消息主机(native messaging host)”,Chrome浏览器扩展还可以与客户端本地应用之间收发消息. 客户端的本地应用注册为Chrome浏览器扩展的“本地消息主机”之后,Chrome浏览器会在独立的进程中启动该本地应用,并通过标准输入/输出流(stdin/stdout)进行消息通信. 1)      本地应用的配置文件的内容 本地应用要能够成为“本地消息主机”,必须有一个manifest.json配置文件(文件名

Chrome浏览器扩展开发系列之十七:扩展中可用的chrome.events API

chrome.events中定义了一些常见的事件类型,可以供Chrome浏览器扩展程序发出对应的事件对象. 对于关注的事件,首先要通过addListener()在对应的事件上注册监听器,示例如下: 1 chrome.alarms.onAlarm.addListener(function(alarm) { 2 appendToLog('alarms.onAlarm --' 3 + ' name: ' + alarm.name 4 + ' scheduledTime: ' + alarm.sched

Ubuntu 14.04 LTS下安装Google Chrome浏览器

在Ubuntu 14.04下安装Google Chrome浏览器非常简单,只要到Chrome的网站下载Deb安装包并进行安装即可.当然你也可以使用APT软件包管理器来安装Google Chrome浏览器,如果你想使用APT软件包管理器安装Google Chrome浏览器的话,本文将介绍这两种方法. 目前Linux下的Google Chrome浏览器有三个版本,稳定版.Beta(测试版)和Unstable(不稳定版,也就是Dev版).其中Beta相对较稳定,而最新的功能将会先出现在Unstable