Chrome浏览器扩展开发系列之三: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://history或新建Tab页面chrome://newtab。不过,一个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进行任何操作。
Chrome浏览器扩展开发系列之三:Google Chrome浏览器扩展的架构的更多相关文章
- Chrome浏览器扩展开发系列之十六:扩展中可用的Chrome浏览器API
除了Chrome浏览器支持的chrome.* API之外,Chrome浏览器扩展还可以使用Chrome浏览器为Web页面或Chrome app提供的APIs.对于Chrome浏览器2支持的API,还可 ...
- Chrome浏览器扩展开发系列之八:Chrome扩展的数据存储
Google Chrome浏览器扩展可以使用如下任何一种存储机制: HTML5的localStorage API实现的本地存储(此处略) Google的chrome.storage.* API实现的浏 ...
- Chrome浏览器扩展开发系列之十八:扩展的软件国际化chrome.i18n API
i18n是internationalization 的简写,这里将讨论软件国际化的问题.熟悉软件国际化的朋友应该知道,软件国际化要求,页面中所有用户可见的字符串都必须置于资源属性文件中.资源属性文件中 ...
- Chrome浏览器扩展开发系列之十九:扩展开发示例
翻译总结了这么多的官网内容,下面以一款博主开发的“沪深股票价格变化实时追踪提醒”软件为例,介绍Chrome浏览器扩展程序的开发,开发环境为Eclipse IDE+Chrome Browser. “沪深 ...
- Chrome浏览器扩展开发系列之一:初识Google Chrome扩展
1. Google Chrome扩展简介 Google Chrome扩展是一种软件,以增强Chrome浏览器的功能. Google Chrome扩展使用HTML.JavaScript.CS ...
- Chrome浏览器扩展开发系列之十四
Chrome浏览器扩展开发系列之十四:本地消息机制Native messaging 时间:2015-10-08 16:17:59 阅读:1361 评论:0 收藏:0 ...
- Chrome浏览器扩展开发系列之十四:本地消息机制Native messagin
Chrome浏览器扩展开发系列之十四:本地消息机制Native messaging 2016-11-24 09:36 114人阅读 评论(0) 收藏 举报 分类: PPAPI(27) 通过将浏览器 ...
- Chrome浏览器扩展开发系列之二:Google Chrome浏览器扩展的调试
1) 查看扩展程序的详细信息和ID 通过Chrome 浏览器的“ 工具->更多工具->扩展程序”,打开chrome://extensions页面,选中右上角的“开发者模式”,可以 ...
- Chrome浏览器扩展开发系列之十七:扩展中可用的chrome.events API
chrome.events中定义了一些常见的事件类型,可以供Chrome浏览器扩展程序发出对应的事件对象. 对于关注的事件,首先要通过addListener()在对应的事件上注册监听器,示例如下: c ...
随机推荐
- 开涛spring3(4.1) - 资源 之 4.1 基础知识
4.1.1 概述 在日常程序开发中,处理外部资源是很繁琐的事情,我们可能需要处理URL资源.File资源资源.ClassPath相关资源.服务器相关资源 (JBoss AS 5.x上的VFS资源)等 ...
- java虚拟机学习-JVM调优总结-垃圾回收面临的问题(8)
如何区分垃圾 上面说到的“引用计数”法,通过统计控制生成对象和删除对象时的引用数来判断.垃圾回收程序收集计数为0的对象即可.但是这种方法无法解决循环引用.所以,后来实现的垃圾判断算法中,都是从程序运行 ...
- MyBatis双数据源配置
配置相关 jdbc 配置 #============================================================================ # MySQL # ...
- 打开Eclipse弹出“No java virtual machine was found..."的解决方法
今天准备用Eclipse抓取Android应用崩溃log,打开Eclipse时发现运行不了有以下弹框 A Java Runtime Environment(JRE) or Java Developme ...
- cas4.2.7实现单点登录
准备前参考: cas server下载地址 cas client 下载地址 安全cookie setSecure详解 Spring通过构造方法注入的四种方式 cas 学习博文 自定义登录页和登录认证 ...
- kafka 0.10.2 消息生产者
package cn.xiaojf.kafka.producer; import org.apache.kafka.clients.producer.KafkaProducer; import org ...
- mybatis xml配置文件要点说明
mapper映射方式: 1 一一具体列举的方式 2扫描package 如: <mappers> <!-- 告知映射文件方式1,一个一个的配置 <mapper resource= ...
- 利用nodeJs来安装less以及编译less文件为css文件
NodeJs 使用nodejs安装less以及编译less文件为css文件 首先下载nodeJs的安装包,按照步骤,安装nodejs. 链接:http://pan.baidu.com/s/1dEsqY ...
- VR全景智慧城市——商家的需求才是全景市场的核心竞争力
消费者视角痛点:比如酒店消费行业,很多消费者在预订酒店过程中,都遇到过这样的场景:网上照片里酒店房间看着宽敞明亮,格调不凡,感觉非常喜欢,等真正推开房门插上房卡一看,却大失所望.在酒店行业,网上照片和 ...
- 【Web开发】Mean web开发 01-Express实现MVC模式开发
简介 Mean是JavaScript的全栈开发框架.更多介绍 用Express实现MVC模式开发是Mean Web全栈开发中的一部分. Express 是一个基于 Node.js 平台的极简.灵活的 ...