| Index: chrome/common/extensions/docs/server2/templates/articles/event_pages.html
|
| diff --git a/chrome/common/extensions/docs/server2/templates/articles/event_pages.html b/chrome/common/extensions/docs/server2/templates/articles/event_pages.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..45c9c10d579e32ca555eb625e18ecaae53b87832
|
| --- /dev/null
|
| +++ b/chrome/common/extensions/docs/server2/templates/articles/event_pages.html
|
| @@ -0,0 +1,123 @@
|
| +<h1>Event Pages</h1>
|
| +
|
| +
|
| +<p>
|
| +Event pages are very similar to
|
| +<a href="background_pages.html">background pages</a>,
|
| +with one important difference:
|
| +event pages are loaded only when they are needed.
|
| +When the event page is not actively doing something,
|
| +it is unloaded, freeing memory and other system resources.
|
| +</p>
|
| +
|
| +<h2 id="manifest">Manifest</h2>
|
| +
|
| +<p>
|
| +Register your event page in the
|
| +<a href="manifest.html">extension manifest</a>:
|
| +</p>
|
| +
|
| +<pre>{
|
| + "name": "My extension",
|
| + ...
|
| + <b>"background": {
|
| + "scripts": ["eventPage.js"],
|
| + "persistent": false
|
| + }</b>,
|
| + ...
|
| +}</pre>
|
| +
|
| +<p>
|
| +Notice that without the "persistent" key, you have
|
| +a regular background page. Persistence is what differentiates
|
| +an event page from a background page.
|
| +</p>
|
| +
|
| +<h2 id="lifetime">Lifetime</h2>
|
| +
|
| +<p>
|
| +The event page is loaded when it is "needed", and unloaded
|
| +when it goes idle again. Here are some examples of things
|
| +that will cause the event page to load:
|
| +</p>
|
| +<ul>
|
| +<li>The extension is first installed.
|
| +<li>The event page listens for an event and the event is dispatched.
|
| +<li>A content script or other extension
|
| +<a href="messaging.html">sends a message.</a>
|
| +<li>Another view in the extension (for example, a popup) calls
|
| +<code><a href="runtime.html#method-getBackgroundPage">chrome.runtime.getBackgroundPage()</a></code>.
|
| +</ul>
|
| +
|
| +<p>
|
| +Once it has been loaded, the event page will stay running
|
| +as long as it is active (for example, calling an extension
|
| +API or issuing a network request). Additionally, the
|
| +event page will not unload until all visible views (for example,
|
| +popup windows) are closed.
|
| +</p>
|
| +
|
| +<p>
|
| +You can observe the lifetime of your event page by clicking
|
| +on "View Background Pages" in Chrome's Wrench menu, or by
|
| +opening Chrome's task manager. You can see when your event
|
| +page loads and unloads by observing when an entry for your
|
| +extension appears in the list of processes.
|
| +</p>
|
| +
|
| +<p>
|
| +Once the event page has been idle a short time
|
| +(a few seconds), the
|
| +<code><a href="runtime.html#event-onSuspend">chrome.runtime.onSuspend</a></code>
|
| +event is dispatched. The event page has a few more seconds to handle this
|
| +event before it is forcibly unloaded. Note that once the event is dispatched,
|
| +new activity will not keep the event page open.
|
| +</p>
|
| +
|
| +<h2 id="transition">Convert background page to event page</h2>
|
| +<p>
|
| +Follow this checklist to convert your extension's
|
| +(persistent) background page to an event page.
|
| +
|
| +<ol>
|
| + <li>Add <code>"persistent": false</code> to your manifest as shown above.
|
| +
|
| + <li>Register to receive any events your extension is interested in
|
| + each time the event page is loaded. The event page will be loaded once
|
| + for each new version of your extension. After that it will only be
|
| + loaded to deliver events you have registered for.
|
| +
|
| + <li>If you need to do some initialization when your extension is
|
| + installed or upgraded, listen to the
|
| + <code><a href="runtime.html#event-onInstalled">chrome.runtime.onInstalled</a></code>
|
| + event.
|
| +
|
| + <li>If you need to keep runtime state in memory throughout a browser
|
| + session, use the <a href="storage.html">storage API</a> or
|
| + IndexedDB. Since the event page does not stay loaded for long, you
|
| + can no longer rely on global variables for runtime state.
|
| +
|
| + <li>Listen to the
|
| + <code><a href="runtime.html#event-onSuspend">chrome.runtime.onSuspend</a></code>
|
| + event if you need to do last second cleanup before your event page
|
| + is shut down. However, we recommend persisting periodically instead.
|
| + That way if your extension crashes without receiving
|
| + <code>onSuspend</code>, no data will typically be lost.
|
| +
|
| + <li>If your extension uses <code>window.setTimeout()</code> or
|
| + <code>window.setInterval()</code>, switch to using the
|
| + <a href="alarms.html">alarms API</a> instead. DOM-based timers won't
|
| + be honored if the event page shuts down.
|
| +
|
| + <li>If your extension uses,
|
| + <code><a href="extension.html#method-getBackgroundPage">chrome.extension.getBackgroundPage()</a></code>,
|
| + switch to
|
| + <code><a href="runtime.html#method-getBackgroundPage">chrome.runtime.getBackgroundPage()</a></code>
|
| + instead. The newer method is asynchronous so that it can start the event
|
| + page if necessary before returning it.
|
| +
|
| + <li>If you're using <a href="messaging.html">message passing</a>, be sure
|
| + to close unused message ports. The event page will not shut down until all
|
| + message ports are closed.
|
| +</ol>
|
| +</p>
|
|
|