Chrome文档翻译--Content Script

事件页面Event Pages

Apps和扩展最常用的需求就是一个生命周期长的脚本来管理任务或者状态。事件页就是干这个的。Event pages仅仅在被需要的时候加载,当它处于不活跃状态时,就会被销毁来释放内存和其他系统资源。Event pages在Chrome22提供稳定版本,它有着显著的性能优越性,尤其体现在低电量设备上。请在开发新程序和开始 迁移已存在的background页面 时优先选择Event pages来维持背景页。

Manifest

在扩展的manifest中注册

{ 
  "name": "My extension",
   ... 
  "background":
       { "scripts": ["eventPage.js"], 
         "persistent": false 
        },
   ...
}

注意,没有“persistent”键就是常规的背景页。Persistence(是否一直存在)就是event page和background page的区别。

生命周期Lifetime

Event page 是在需要的时候加载,再次闲置的时候卸载(销毁)。下面是一些触发event page加载的事件:

一旦处于加载状态,event page在活跃时就会一直处于运行状态(比如调用extention API或者发起网络请求)。另外,event page将不会卸载(销毁)除非所有可视试图(比如popup窗口)被关闭并且所有消息端口也关闭。注意,如果event page已经加载,打开一个视图不会再次触发加载,只会防止它被关闭(引用计数+1)。
确保你的event page在事件处理完之后马上关闭。你可以通过打开Chrome的任务管理器来查看事件的生命周期。在扩展出现在进程表上时就可以看到事件是什么时候加载和卸载了。
一旦event page被闲置一小会儿(几秒), runtime.onSuspendCanceled 事件就会被发送。
Event page在被强制卸载之前会有几秒的时间来处理这个事件。一般情况下,如果在这期间某个时间被触发,那么Event page就会被加载,挂起操作取消,runtime.onSuspendCanceled被发送。

事件迁移 Event registration

Chrome会一直追踪被添加到监听的App的事件或者扩展。当发送这样的事件的时候,event page就会被加载。 相反的, 如果app或者扩展通过removeListener取消某一事件的所有监听器, Chrome将不再为这个事件加载它的event page。
因为监听器自身仅存在于event page的环境中,那就必须在每次event page加载的时候使用addListener,仅在 runtime.onInstalled中这样做,并且此时它自身不足够实现。
事件迁移实例Google Mail Checker

Background page转换 Event page

按照这个列表来转换扩展的background page成event page

  1. 在manifest文件中添加"persistent": false
  2. 如果扩展中使用了 window.setTimeout() 或者 window.setInterval()
    , 用alarms API替代.
    基于DOM的计时器在页面被关闭的时候就会失效。
  3. 同样的,如果页面关闭,其它异步HTML5 APIs 像同志和地理位置将不会完成。取而代之,使用APIs,比如 notifications.
  4. 如果你的扩展使用了extension.getBackgroundPage, 请替换成runtime.getBackgroundPage. 新方法是异步的,必要时可以在先打开event page然后获得返回值。

使用event page最好的实践

记住这些技巧可以避免小错误。

  1. 每次加载的时候都要注册所有扩展需要用到的事件。Event page将在版本更新的时候加载一次。之后就只会用你注册的事件发送通知。通常这也意味着你的事件监听代码需要在event page代码结构的最顶层,否则在event page重载的时候它们可能会失效。

  2. 如果在扩展安装或者更新的时候需要做一些初始化,监听runtime.onInstalled事件。这是注册 declarativeWebRequest 最好的地方,contextMenu入口, 以及其他一次性初始化。

  3. 如果需要在内存中获取浏览器会话期间的运行时状态,使用 storage API 或者 IndexedDB。因为event page不会持续存在,你就不能再依靠全局变量来读取运行时状态。

  4. 使用event filters 来限制事件的通知. 比如,如果你在监听 tabs.onUpdated
    事件, 请尝试使用带过滤器的 webNavigation.onCompleted
    事件来替换(tabs API 不支持过滤器). 这样,你的event page就只会在你感兴趣的事件上加载。.

  5. 如果你需要在页面关闭之前做倒数第二步的清理,请监听 runtime.onSuspend事件。
    然而,我们建议使用持续性的。这样的话即使扩展崩溃的情况下没有收到onSuspend事件也不会丢失数据。
    请确认是否关闭了不常用的信息端口。Event page将不会关闭直到所有的端口都关闭。

  6. 如果你正在使用 message passing, be sure to close unused message ports. The event page will not shut down until all message ports are closed.

  7. 如果你正在使用context menus API, 给contextMenus.create传递字符串ID
    , 然后使用contextMenus.onClicked
    回掉代替contextMenus.createonclick 参数。
    .

  8. 记得测试event page是否在闲置了几秒就会发生的加载和卸载时正常工作。通常错误包括在加载时包含不必要的工作(本应仅在扩展安装的时候完成的任务); 在加载时设置闹钟 (这会重置所有值钱的闹钟); 后者没有在加载的时候添加监听器.

以上》内容在CC-By 3.0 license有效

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,992评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,212评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,535评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,197评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,310评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,383评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,409评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,191评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,621评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,910评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,084评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,763评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,403评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,083评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,318评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,946评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,967评论 2 351

推荐阅读更多精彩内容