Chrome Extension開発を勉強してみる (23) - Event Pages -
何やらそういう仕様がある模様で。詳しい概要は省略するけど、要は「常に常駐しないバックグラウンドページ」っていう感じな模様
でこれ使うには専用のAPIがある訳でも無い模様。通常のバックグラウンドページの仕様に設定をするだけでバックグラウンドページがイベントページとして認識するようになる模様。例えば前回のchrome.alarmsなmanifest.jsonをEvent Pagesとして扱う場合には
{
"name": "experimental",
"version": "0.1",
"manifest_version": 2,
"background": {
"scripts": ["background.js"],
"persistent": false
},
"permissions": ["alarms"],
"minimum_chrome_version": "23"
}
というようにpersistent: falseをするだけ。この一行を付けるだけで可能。
でこれどういう感じなのかと簡単に言うと上記な設定を行った場合、バックグラウンドページプロセスを見ると、一旦は起動されているがちょっとたつとプロセスが消える。で必要になった際に応じてイベントページのプロセスが常駐するようになったりする。つまりアイドル状態にあるバックグラウンドページを開放して常駐してリソースを食い込んだりしないような感じになる模様。表現合ってるかは微妙ですけど
んで後述する参考に書いてあるけど、一定の条件下の場合バックグラウンドページが正しく実行されないケースがある模様なのでそれは注意。
参考1: http://developer.chrome.com/extensions/event_pages.html
参考2: http://blog.monoweb.info/blog/2012/11/08/chrome-event-pages
追記1: chrome.extension.getBackgroundPageに関して
Event Pagesな状態で使ってる場合にchrome.extension.getBackgroundPageをEvent Pagesなプロセスが落ちてる時にやるとnullが返ってくる模様。なのでchrome.runtime.getBackgroundPageを使うべきらしい。ただし使い方が従来のと違う
chrome.runtime.getBackgroundPage(function(bgPage) {});
という感じになる。ちなみにこれをやった際にはEvent Pagesなプロセスが起きる模様