| 1 <!DOCTYPE html><!-- This page is a placeholder for generated extensions api doc.
Note: 1) The <head> information in this page is significant, should be uniform
across api docs and should be edited only with knowledge of the templating mecha
nism. 2) The <body> tag *must* retain id="body" 3) All <body>.innerHTML is gener
eated as an rendering step. If viewed in a browser, it will be re-generated from
the template, json schema and authored overview content. 4) The <body>.innerHTM
L is also generated by an offline step so that this page may easily be indexed b
y search engines. TODO(rafaelw): Abstract this into a "pageshell" that becomes t
he single version of page template shell and the "instance" pages (bookmarks.htm
l, etc...) can be generated with a build step. --><!-- <html> must retain id="te
mplate --><html xmlns="http://www.w3.org/1999/xhtml" jstcache="0"><!-- <head> da
ta is significant and loads the needed libraries and styles --><head jstcache="0
"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" jstcache="
0"> <title jscontent="getPageTitle()" jstcache="1">Content Scripts</title> <link
href="css/ApiRefStyles.css" rel="stylesheet" type="text/css" jstcache="0"> <scr
ipt type="text/javascript" src="../../../third_party/jstemplate/jstemplate_compi
led.js" jstcache="0"> </script> <script type="text/javascript" src="js/api_page_
generator.js" jstcache="0"></script> <script type="text/javascript" src="js/boot
strap.js" jstcache="0"></script> </head><!-- <body> content is completely genera
ted. Do not edit, as it will be and rewritten. --><body jstcache="0"> <div id="c
ontainer" jstcache="0"> <a name="top" jstcache="0"> </a> <!-- API HEADER --> <di
v id="pageHeader" jstcache="0"> <div id="searchbox" jstcache="0"> <form action="
http://www.google.com/cse" id="cse-search-box" jstcache="0"> <div jstcache="0">
<input type="hidden" name="cx" value="002967670403910741006:61_cvzfqtno" jstcach
e="0"> <input type="hidden" name="ie" value="UTF-8" jstcache="0"> <input type="t
ext" name="q" size="31" jstcache="0"> <input type="submit" name="sa" value="Sear
ch" jstcache="0"> </div> </form> <script type="text/javascript" src="http://www.
google.com/jsapi" jstcache="0"></script> <script type="text/javascript" jstcache
="0">google.load("elements", "1", {packages: "transliteration"});</script> <scri
pt type="text/javascript" src="http://www.google.com/coop/cse/t13n?form=cse-sear
ch-box&t13n_langs=en" jstcache="0"></script> <script type="text/javascript"
src="http://www.google.com/coop/cse/brand?form=cse-search-box&lang=en" jstca
che="0"></script> </div> <div id="pageTitle" jstcache="0"> <h1 jscontent="getPag
eTitle()" jstcache="1">Content Scripts</h1> </div> </div> <!-- /pageHeader --> <
div id="pageContent" jstcache="0"> <!-- SIDENAV --> <div id="leftNav" jstcache="
0"> <ul jstcache="0"> <li jstcache="0"> <a href="index.html" jstcache="0">Home</
a></li> <li jstcache="0"> <a href="getstarted.html" jstcache="0">Getting Started
</a></li> <li jstcache="0"> <a href="overview.html" jstcache="0">Overview</a></l
i> <li jstcache="0"> <a href="devguide.html" jstcache="0"><div jstcache="0">Deve
loper's Guide</div></a> <ul jstcache="0"> <li jstcache="0"><a href="toolstrip.ht
ml" jstcache="0">Toolstrips</a></li> <li jstcache="0"><a href="pageActions.html"
jstcache="0">Page Actions</a></li> <li jstcache="0"><a href="background_pages.h
tml" jstcache="0">Background Pages</a></li> <li jstcache="0" class="leftNavSelec
ted">Content Scripts</li> <li jstcache="0">Events</li> <li jstcache="0"><a href=
"tabs.html" jstcache="0">Tabs</a></li> <li jstcache="0"><a href="windows.html" j
stcache="0">Windows</a></li> <li jstcache="0"><a href="bookmarks.html" jstcache=
"0">Bookmarks</a></li> <li jstcache="0">Themes</li> <li jstcache="0"><a href="np
api.html" jstcache="0">NPAPI Plugins</a></li> <li jstcache="0"><a href="packagin
g.html" jstcache="0">Packaging</a></li> <li jstcache="0">Autoupdate</li> </ul> <
/li> <li jstcache="0"><a href="tutorials.html" jstcache="0"><div jstcache="0">Tu
torials</div></a> <ul jstcache="0"> <li jstcache="0"><a href="tut_debugging.html
" jstcache="0">Debugging</a></li> </ul> </li> <li jstcache="0">Reference <ul jst
cache="0"> <li jstcache="0"> Formats <ul jstcache="0"> <li jstcache="0"><a href=
"manifest.html" jstcache="0">Manifest Files</a></li> <li jstcache="0">Match Patt
erns</li> <li jstcache="0">Packages (.crx)</li> </ul> </li> <li jstcache="0"> <a
href="api_index.html" jstcache="0">chrome.* APIs</a> </li> <li jstcache="0">Oth
er APIs</li> </ul> </li> <li jstcache="0">Samples <ul jstcache="0"> <li jstcache
="0">[sample 1]</li> <li jstcache="0">[sample 2]</li> </ul> </li> </ul> </div> <
div id="mainColumn" jstcache="0"> <!-- TABLE OF CONTENTS --> <div id="toc" jsdis
play="showPageTOC()" jstcache="2"> <p jstcache="0">Contents</p> <ol jstcache="0"
> <li jsselect="getStaticTOC()" jstcache="9" jsinstance="0"> <a jscontent="name"
jsvalues=".href:'#' + href" jstcache="14" href="#H2-0">Registration</a> <ol jst
cache="0"> <li jsselect="$this.children" jstcache="22" jsinstance="*0" style="di
splay: none; "> <a jscontent="name" jsvalues=".href:'#' + href" jstcache="14">h3
Name</a> </li> </ol> </li><li jsselect="getStaticTOC()" jstcache="9" jsinstance=
"1"> <a jscontent="name" jsvalues=".href:'#' + href" jstcache="14" href="#H2-1">
Match patterns</a> <ol jstcache="0"> <li jsselect="$this.children" jstcache="22"
jsinstance="*0" style="display: none; "> <a jscontent="name" jsvalues=".href:'#
' + href" jstcache="14">h3Name</a> </li> </ol> </li><li jsselect="getStaticTOC()
" jstcache="9" jsinstance="2"> <a jscontent="name" jsvalues=".href:'#' + href" j
stcache="14" href="#H2-2">Execution environment</a> <ol jstcache="0"> <li jssele
ct="$this.children" jstcache="22" jsinstance="*0" style="display: none; "> <a js
content="name" jsvalues=".href:'#' + href" jstcache="14">h3Name</a> </li> </ol>
</li><li jsselect="getStaticTOC()" jstcache="9" jsinstance="3"> <a jscontent="na
me" jsvalues=".href:'#' + href" jstcache="14" href="#H2-3">Messaging</a> <ol jst
cache="0"> <li jsselect="$this.children" jstcache="22" jsinstance="*0" style="di
splay: none; "> <a jscontent="name" jsvalues=".href:'#' + href" jstcache="14">h3
Name</a> </li> </ol> </li><li jsselect="getStaticTOC()" jstcache="9" jsinstance=
"*4"> <a jscontent="name" jsvalues=".href:'#' + href" jstcache="14" href="#H2-4"
>Communication with the embedding page</a> <ol jstcache="0"> <li jsselect="$this
.children" jstcache="22" jsinstance="*0" style="display: none; "> <a jscontent="
name" jsvalues=".href:'#' + href" jstcache="14">h3Name</a> </li> </ol> </li> <di
v jsselect="apiDefinition" jstcache="3" style="display: none; "> <li jstcache="0
"> <a href="#apiReference" jscontent="'API Reference: ' + getModuleName()" jstca
che="23">API Reference</a> <ol jstcache="0"> <li jsdisplay="$this.properties" js
tcache="5"> <a href="#properties" jstcache="0">Properties</a> <ol jstcache="0">
<li jsselect="getPropertyListFromObject($this)" jstcache="10"> <a jscontent="nam
e" jsvalues=".href:'#property-' + name" href="#property-anchor" jstcache="42">pr
opertyName</a> </li> </ol> </li> <li jsdisplay="functions && functions.l
ength > 0" jstcache="6"> <a href="#methods" jstcache="0">Methods</a> <ol jstc
ache="0"> <li jsselect="functions" jstcache="11"> <a jscontent="name" jsvalues="
.href:'#method-' + name" href="#method-anchor" jstcache="43">methodName</a> </li
> </ol> </li> <li jsdisplay="events && events.length > 0" jstcache="7
"> <a href="#events" jstcache="0">Events</a> <ol jstcache="0"> <li jsselect="eve
nts" jstcache="12"> <a jscontent="name" jsvalues=".href:'#event-' + name" href="
#event-anchor" jstcache="44">eventName</a> </li> </ol> </li> <li jsdisplay="type
s && types.length > 0" jstcache="8"> <a href="#types" jstcache="0">Ty
pes</a> <ol jstcache="0"> <li jsselect="types" jstcache="13"> <a jscontent="id"
jsvalues=".href:'#type-' + id" href="#id-anchor" jstcache="45">id</a> </li> </ol
> </li> </ol> </li> </div> </ol> </div> <!-- /TABLE OF CONTENTS --> <!-- STATIC
CONTENT PLACEHOLDER --> <div id="static" jstcache="0"><div id="pageData-title" c
lass="pageData" jstcache="0">Content Scripts</div> <div id="pageData-showTOC" cl
ass="pageData" jstcache="0">true</div> <p jstcache="0">Content Scripts are JavaS
cript files that run in the context of web pages. By using the standard <a href=
"http://www.w3.org/TR/DOM-Level-2-HTML/" jstcache="0">Document Object Model</a>
(DOM), they can read details of the web pages the browser visits, or make change
s to them. </p><p jstcache="0">Some examples of things that content scripts can
do include: </p><ul jstcache="0"> <li jstcache="0">Find unlinked URLs in web pag
es and convert them into hyperlinks </li><li jstcache="0">Increase the font size
to make text more legible </li><li jstcache="0">Find and process <a href="http:
//microformats.org/" jstcache="0">microformat</a> data in the DOM </li></ul> <a
name="H2-0" jstcache="0"></a><h2 id="registration" jstcache="0">Registration</h2
> <p jstcache="0">Content scripts are registered in an extension's <a href="mani
fest.html" jstcache="0">manifest.json</a> file, like so: </p><pre jstcache="0">{
"name": "My First Extension", "version": "1.0", "description": "The first exten
sion that I made.", <span style="background:yellow; font-weight:bold;" jstcache=
"0"> "content_scripts": [ { "matches": ["http://www.google.com/*"], "css": ["mys
tyles.css"], "js": ["jquery.js", "myscript.js"] } ]</span> }</pre> <p jstcache="
0">An extension can contain any number of content scripts, and a content script
can consist of any number of JavaScript or CSS files. The value of the <code jst
cache="0">matches</code> property controls when the content script will run. </p
><p jstcache="0">Each content script registered in the manifest can specify the
following properties:</p> <table jstcache="0"> <tbody jstcache="0"><tr jstcache=
"0"> <th jstcache="0">Name</th> <th jstcache="0">Type</th> <th jstcache="0">Desc
ription</th> </tr> <tr jstcache="0"> <td jstcache="0">matches</td> <td jstcache=
"0">array of strings</td> <td jstcache="0">Required. Controls the pages this con
tent script will be injected into. See <a href="#match_patterns" jstcache="0">Ma
tch Patterns</a> for more details on the syntax of these strins.</td> </tr> <tr
jstcache="0"> <td jstcache="0">js</td> <td jstcache="0"><nobr jstcache="0">array
of strings</nobr></td> <td jstcache="0">Optional. The list of JavaScript files
to be injected into matching pages. These are injected in the order they appear
in this array.</td> </tr> <tr jstcache="0"> <td jstcache="0">css</td> <td jstcac
he="0">array of strings</td> <td jstcache="0">Optional. The list of CSS files to
be injected into matching pages. These are injected in the order they appear in
this array, before any DOM is constructed or displayed for the page.</td> </tr>
<tr jstcache="0"> <td jstcache="0">run_at</td> <td jstcache="0">string</td> <td
jstcache="0">Optional. Controls when the files in <code jstcache="0">js</code>
are injected. Can be <code jstcache="0">"document_start"</code> or <code jstcach
e="0">"document_end"</code>. Defaults to <code jstcache="0">"document_end"</code
>. In the case of <code jstcache="0">"document_start"</code>, the files are inje
cted after any files from <code jstcache="0">"css"</code>, but before any other
DOM is constructed or any other script is run. In the case of <code jstcache="0"
>"document_end"</code>, the files are injected after the DOM is complete, but be
fore subresources like images and frames have necessarily loaded.</td> </tr> </t
body></table> <a name="H2-1" jstcache="0"></a><h2 id="match_patterns" jstcache="
0">Match patterns</h2> <p class="comment" jstcache="0">TODO</p> <a name="H2-2" j
stcache="0"></a><h2 id="execution_environment" jstcache="0">Execution environmen
t</h2> <p jstcache="0">Content scripts execute in a special environment called a
n <em jstcache="0">isolated world</em>. They have access to the DOM of the page
they are injected into, but not to any JavaScript variables or functions created
by the page. It looks to each content script as if there is no other JavaScript
executing on the page it is running on. The same is true in reverse: JavaScript
running on the page cannot call any functions or access any variables defined b
y content scripts. </p><p jstcache="0">For example, consider this simple page: <
/p><pre jstcache="0">hello.html =========== <html> <button id="button"&
gt;click me</button> <script> var greeting = "hello!"; function sayG
reeting() { alert(greeting); } document.getElementById("button").onclick = sayGr
eeting; </script> </html></pre> <p jstcache="0">Now, suppose this co
ntent script was injected into hello.html: </p><pre jstcache="0">contentscript.j
s ================== console.log(greeting); // undefined console.log(sayGreeting
); // undefined console.log(document.getElementById("button").onclick); // still
undefined document.getElementById("button").onclick = function() { alert("hola!
"); }</pre> <p jstcache="0">Now, if the button is pressed, you will see both gre
etings. </p><p jstcache="0">Isolated worlds allow each content script to make ch
anges to its JavaScript environment without worrying about conflicting with the
page or with other contnet scripts. For example, a content script could include
JQuery v1 and the page could include JQuery v2, and they wouldn't conflict with
each other. </p><p jstcache="0">Another important benefit of isolated worlds is
that they completely separate the JavaScript on the page from the JavaScript in
extensions. This allows us to offer extra functionality to content scripts that
should not be accessible from web pages without worrying about web pages accessi
ng it. </p><a name="H2-3" jstcache="0"></a><h2 id="messaging" jstcache="0">Messa
ging</h2> <p jstcache="0">Content scripts can communicate with their parent exte
nsion using message passing. The content script opens a channel to the extension
using the <a href="extension.html#connect" jstcache="0">chrome.extension.connec
t()</a> method and then sends messages back and forth to it. The messages can co
ntain any valid JSON object (null, boolean, number, string, array, or object). <
/p><p jstcache="0">The parent extension can also open a channel to a content scr
ipt in a given tab by calling <a href="tabs.html#connect" jstcache="0">chrome.ta
bs.connect(tabId)</a>. </p><p jstcache="0">When a channel is opened from a conte
nt script to an extension, the <a href="extension.html#onConnect" jstcache="0">o
nConnect</a> event is fired in all views in the extension. Any view can receive
the event. The event contains a <a href="extension.html#port" jstcache="0">Port<
/a> object, which can be used by the extension view to communicate back to the c
ontent script. </p><p class="comment" jstcache="0">[TODO: Complete this]</p> <a
name="H2-4" jstcache="0"></a><h2 id="hostPageCommuncation" jstcache="0">Communic
ation with the embedding page</h2> <p jstcache="0">Although the execution enviro
nments of content scripts and the pages that host them are isolated from each ot
her, they share access to the page's DOM. If the page wishes to communicate with
the content script (or with the extension via the content script), it must do s
o through the shared DOM.</p> <p jstcache="0">An example can be accomplished usi
ng custom DOM events and storing data in a known location. Consider: </p> <pre j
stcache="0">http://foo.com/example.html ================================ var cus
tomEvent = document.createEvent('Event'); customEvent.initEvent('myCustomEvent',
true, true); function fireCustomEvent(data) { hidenDiv = document.getElementByI
d('myCustomEventDiv'); hidenDiv.innerHTML = data hidenDiv.dispatchEvent(customEv
ent); }</pre> <pre jstcache="0">contentscript.js ===================== var port
= chrome.extension.connect(); document.getElementById('myCustomEventDiv').addEve
ntListener('myCustomEvent', function() { var eventData = document.getElementById
('myCustomEventDiv').innerHTML; port.postMessage({message: "myCustomEvent", valu
es: eventData}); });</pre> <p jstcache="0">In the above example, example.html (w
hich is not a part of the extension) creates a custom event and then can decide
to fire the event by setting the event data to a known location in the DOM and t
hen dispatching the custom event. The content script listens for the name of the
custom event on the known element and handles the event by inspecting the data
of the element, and turning around to post the message to the extension process.
In this way the page establishes a line of communication to the extension. The
reverse is possible through similar means.</p> </div> <!-- API PAGE --> <div cla
ss="apiPage" jsselect="apiDefinition" jstcache="3" style="display: none; "> <a n
ame="apiReference" jstcache="0"></a> <h2 jscontent="getModuleName() + ' API refe
rence'" jstcache="4">chrome.apiname API reference</h2> <!-- PROPERTIES --> <div
jsdisplay="$this.properties" class="apiGroup" jstcache="5"> <a name="properties"
jstcache="0"></a> <h3 id="properties" jstcache="0">Properties</h3> <div jsselec
t="getPropertyListFromObject($this)" jstcache="10"> <a jsvalues=".name:'property
-' + name" jstcache="15"></a> <h4 jscontent="name" jstcache="16">getLastError</h
4> <div class="summary" jstcache="0"> <!-- Note: intentionally longer 80 columns
--> <span jscontent="getModuleName() + '.'" jstcache="24">chrome.extension</spa
n><span jscontent="$this.name" jstcache="25">lastError</span> </div> <div transc
lude="valueTemplate" jstcache="17"> </div> </div> </div> <!-- /apiGroup --> <!--
METHODS --> <div jsdisplay="functions && functions.length > 0" class
="apiGroup" id="methods" jstcache="6"> <a name="methods" jstcache="0"></a> <h3 j
stcache="0">Methods</h3> <!-- iterates over all functions --> <div class="apiIte
m" jsselect="functions" jstcache="11"> <a jsvalues=".name:'method-' + name" jstc
ache="18"></a> <!-- method-anchor --> <h4 jscontent="name" jstcache="16">method
name</h4> <div class="summary" jstcache="0"><span jsdisplay="returns" jscontent=
"getTypeName(returns)" jstcache="26">void</span> <!-- Note: intentionally longer
80 columns --> <span jscontent="getFullyQualifiedFunctionName($this)" jstcache=
"27">chrome.module.methodName</span>(<span jsselect="parameters" jsvalues="class
:optional ? 'optional' : ''" jstcache="28"><span jsdisplay="$index" jstcache="34
">, </span><span jscontent="getTypeName($this)" jstcache="35"></span> <var jstca
che="0"><span jscontent="name" jstcache="16"></span></var></span>)</div> <div cl
ass="description" jstcache="0"> <p class="todo" jsdisplay="!description" jstcach
e="29">Undocumented.</p> <p jsdisplay="description" jsvalues=".innerHTML:descrip
tion" jstcache="30"> A description from the json schema def of the function goes
here. </p> <!-- PARAMETERS --> <h4 jstcache="0">Parameters</h4> <dl jstcache="0
"> <div jsselect="parameters" jstcache="36"> <!-- VALUE: This is a subtemplate t
hat is used elsewhere via jsTemplate *transclude* --> <div id="valueTemplate" js
tcache="0"> <dt jstcache="0"> <var jsdisplay="$this.name" jscontent="$this.name"
jstcache="46">paramName</var> <em jstcache="0"> <!-- TYPE --> <div style="displ
ay:inline" jstcache="0"> ( <span class="optional" jsdisplay="optional" jstcache=
"47">optional</span> <span id="typeTemplate" jstcache="0"> <span jsdisplay="getT
ypeRef($this)" jstcache="48"> <a jsvalues=".href: getTypeRefPage($this) + '#type
-' + getTypeRef($this)" jscontent="getTypeRef($this)" jstcache="50"> Type</a> </
span> <span jsdisplay="!getTypeRef($this)" jstcache="49"> <span jsdisplay="isArr
ay($this)" jstcache="51"> array of <span jsselect="items" jstcache="53"><span tr
ansclude="typeTemplate" jstcache="54"></span></span> </span> <span jsdisplay="!i
sArray($this)" jscontent="getTypeName($this)" jstcache="52">paramType</span> </s
pan> </span> ) </div> </em> </dt> <dd class="todo" jsdisplay="!$this.description
" jstcache="39"> Undocumented. </dd> <dd jsdisplay="$this.description" jsvalues=
".innerHTML:$this.description" jstcache="40"> Description of this parameter from
the json schema. </dd> <!-- OBJECT PROPERTIES --> <dd jsdisplay="shouldExpandOb
ject($this)" jstcache="41"> <dl jstcache="0"> <div jsselect="getPropertyListFrom
Object($this)" jstcache="10"> <div transclude="valueTemplate" jstcache="17"> </d
iv> </div> </dl> </dd> </div> <!-- /VALUE --> </div> </dl> <!-- RETURNS --> <h4
jsdisplay="returns" jstcache="31">Returns</h4> <dl jstcache="0"> <div jsselect="
returns" jstcache="37"> <div transclude="valueTemplate" jstcache="17"> </div> </
div> </dl> <!-- CALLBACK --> <div jsdisplay="hasCallback(parameters)" jstcac
he="32"> <div jsselect="getCallbackParameters(parameters)" jstcache="38"> <h4 js
tcache="0">Callback function</h4> <p jstcache="0"> If you specify the <em jstcac
he="0">callback</em> parameter, it should specify a function that looks like thi
s: </p> <!-- Note: intentionally longer 80 columns --> <pre jstcache="0">functio
n(<span jscontent="getSignatureString(parameters)" jstcache="33">Type param1, Ty
pe param2</span>) <span class="subdued" jstcache="0">{...}</span>);</pre> <dl js
tcache="0"> <div jsselect="parameters" jstcache="36"> <div transclude="valueTemp
late" jstcache="17"> </div> </div> </dl> </div> </div> </div> <!-- /description
--> </div> <!-- /apiItem --> </div> <!-- /apiGroup --> <!-- EVENTS --> <div jsdi
splay="events && events.length > 0" class="apiGroup" jstcache="7"> <a
name="events" jstcache="0"></a> <h3 id="events" jstcache="0">Events</h3> <!-- i
terates over all events --> <div jsselect="events" class="apiItem" jstcache="12"
> <a jsvalues=".name:'event-' + name" jstcache="19"></a> <h4 jscontent="name" js
tcache="16">event name</h4> <div class="summary" jstcache="0"> <!-- Note: intent
ionally longer 80 columns --> <span jscontent="getModuleName() + '.'" class="sub
dued" jstcache="24">chrome.bookmarks</span><span jscontent="name" jstcache="16">
onEvent</span><span class="subdued" jstcache="0">.addListener</span>(function(<s
pan jscontent="getSignatureString(parameters)" jstcache="33">Type param1, Type p
aram2</span>) <span class="subdued" jstcache="0">{...}</span>); </div> <div clas
s="description" jstcache="0"> <p class="todo" jsdisplay="!description" jstcache=
"29">Undocumented.</p> <p jsdisplay="description" jsvalues=".innerHTML:descripti
on" jstcache="30"> A description from the json schema def of the event goes here
. </p> <!-- PARAMETERS --> <h4 jstcache="0">Parameters</h4> <dl jstcache="0"> <d
iv jsselect="parameters" jstcache="36"> <div transclude="valueTemplate" jstcache
="17"> </div> </div> </dl> </div> <!-- /decription --> </div> <!-- /apiItem -->
</div> <!-- /apiGroup --> <!-- TYPES --> <div jsdisplay="types && types.
length > 0" class="apiGroup" jstcache="8"> <a name="types" jstcache="0"></a>
<h3 id="types" jstcache="0">Types</h3> <!-- iterates over all types --> <div jss
elect="types" class="apiItem" jstcache="13"> <a jsvalues=".name:'type-' + id" js
tcache="20"></a> <h4 jscontent="id" jstcache="21">type name</h4> <div transclude
="valueTemplate" jstcache="17"> </div> </div> <!-- /apiItem --> </div> <!-- /api
Group --> </div> <!-- /apiPage --> </div> <!-- /mainColumn --> </div> <!-- /page
Content --> <div id="pageFooter" --="" jstcache="0"> Copyright 2009. For terms o
f use, see the Chromium <a href="http://src.chromium.org/viewvc/chrome/trunk/src
/LICENSE" jstcache="0">license</a>. </div> <!-- /pageFooter --> </div> <!-- /con
tainer --> </body></html> | 1 <!DOCTYPE html><!-- This page is a placeholder for generated extensions api doc.
Note: 1) The <head> information in this page is significant, should be uniform
across api docs and should be edited only with knowledge of the templating mecha
nism. 2) The <body> tag *must* retain id="body" 3) All <body>.innerHTML is gener
eated as an rendering step. If viewed in a browser, it will be re-generated from
the template, json schema and authored overview content. 4) The <body>.innerHTM
L is also generated by an offline step so that this page may easily be indexed b
y search engines. TODO(rafaelw): Abstract this into a "pageshell" that becomes t
he single version of page template shell and the "instance" pages (bookmarks.htm
l, etc...) can be generated with a build step. --><!-- <html> must retain id="te
mplate --><html xmlns="http://www.w3.org/1999/xhtml" jstcache="0"><!-- <head> da
ta is significant and loads the needed libraries and styles --><head jstcache="0
"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" jstcache="
0"> <title jscontent="getPageTitle()" jstcache="1">Content Scripts</title> <link
href="css/ApiRefStyles.css" rel="stylesheet" type="text/css" jstcache="0"> <scr
ipt type="text/javascript" src="../../../third_party/jstemplate/jstemplate_compi
led.js" jstcache="0"> </script> <script type="text/javascript" src="js/api_page_
generator.js" jstcache="0"></script> <script type="text/javascript" src="js/boot
strap.js" jstcache="0"></script> </head><!-- <body> content is completely genera
ted. Do not edit, as it will be and rewritten. --><body jstcache="0"> <div id="c
ontainer" jstcache="0"> <a name="top" jstcache="0"> </a> <!-- API HEADER --> <di
v id="pageHeader" jstcache="0"> <div id="searchbox" jstcache="0"> <form action="
http://www.google.com/cse" id="cse-search-box" jstcache="0"> <div jstcache="0">
<input type="hidden" name="cx" value="002967670403910741006:61_cvzfqtno" jstcach
e="0"> <input type="hidden" name="ie" value="UTF-8" jstcache="0"> <input type="t
ext" name="q" size="31" jstcache="0"> <input type="submit" name="sa" value="Sear
ch" jstcache="0"> </div> </form> <script type="text/javascript" src="http://www.
google.com/jsapi" jstcache="0"></script> <script type="text/javascript" jstcache
="0">google.load("elements", "1", {packages: "transliteration"});</script> <scri
pt type="text/javascript" src="http://www.google.com/coop/cse/t13n?form=cse-sear
ch-box&t13n_langs=en" jstcache="0"></script> <script type="text/javascript"
src="http://www.google.com/coop/cse/brand?form=cse-search-box&lang=en" jstca
che="0"></script> </div> <div id="pageTitle" jstcache="0"> <h1 jscontent="getPag
eTitle()" jstcache="1">Content Scripts</h1> </div> </div> <!-- /pageHeader --> <
div id="pageContent" jstcache="0"> <!-- SIDENAV --> <div id="leftNav" jstcache="
0"> <ul jstcache="0"> <li jstcache="0"> <a href="index.html" jstcache="0">Home</
a></li> <li jstcache="0"> <a href="getstarted.html" jstcache="0">Getting Started
</a></li> <li jstcache="0"> <a href="overview.html" jstcache="0">Overview</a></l
i> <li jstcache="0"> <a href="devguide.html" jstcache="0"><div jstcache="0">Deve
loper's Guide</div></a> <ul jstcache="0"> <li jstcache="0"><a href="toolstrip.ht
ml" jstcache="0">Toolstrips</a></li> <li jstcache="0"><a href="pageActions.html"
jstcache="0">Page Actions</a></li> <li jstcache="0"><a href="background_pages.h
tml" jstcache="0">Background Pages</a></li> <li jstcache="0" class="leftNavSelec
ted">Content Scripts</li> <li jstcache="0">Events</li> <li jstcache="0"><a href=
"tabs.html" jstcache="0">Tabs</a></li> <li jstcache="0"><a href="windows.html" j
stcache="0">Windows</a></li> <li jstcache="0"><a href="bookmarks.html" jstcache=
"0">Bookmarks</a></li> <li jstcache="0">Themes</li> <li jstcache="0"><a href="np
api.html" jstcache="0">NPAPI Plugins</a></li> <li jstcache="0"><a href="packagin
g.html" jstcache="0">Packaging</a></li> <li jstcache="0">Autoupdate</li> </ul> <
/li> <li jstcache="0"><a href="tutorials.html" jstcache="0"><div jstcache="0">Tu
torials</div></a> <ul jstcache="0"> <li jstcache="0"><a href="tut_debugging.html
" jstcache="0">Debugging</a></li> </ul> </li> <li jstcache="0">Reference <ul jst
cache="0"> <li jstcache="0"> Formats <ul jstcache="0"> <li jstcache="0"><a href=
"manifest.html" jstcache="0">Manifest Files</a></li> <li jstcache="0">Match Patt
erns</li> <li jstcache="0">Packages (.crx)</li> </ul> </li> <li jstcache="0"> <a
href="api_index.html" jstcache="0">chrome.* APIs</a> </li> <li jstcache="0"> <a
href="api_other.html" jstcache="0">Other APIs</a> </li> </ul> </li> <li jstcach
e="0"><a href="http://dev.chromium.org/developers/design-documents/extensions/sa
mples" jstcache="0">Samples</a></li> </ul> </div> <div id="mainColumn" jstcache=
"0"> <!-- TABLE OF CONTENTS --> <div id="toc" jsdisplay="showPageTOC()" jstcache
="2"> <p jstcache="0">Contents</p> <ol jstcache="0"> <li jsselect="getStaticTOC(
)" jstcache="9" jsinstance="0"> <a jscontent="name" jsvalues=".href:'#' + href"
jstcache="14" href="#H2-0">Manifest</a> <ol jstcache="0"> <li jsselect="$this.ch
ildren" jstcache="22" jsinstance="*0" style="display: none; "> <a jscontent="nam
e" jsvalues=".href:'#' + href" jstcache="14">h3Name</a> </li> </ol> </li><li jss
elect="getStaticTOC()" jstcache="9" jsinstance="1"> <a jscontent="name" jsvalues
=".href:'#' + href" jstcache="14" href="#H2-1">Execution environment</a> <ol jst
cache="0"> <li jsselect="$this.children" jstcache="22" jsinstance="*0" style="di
splay: none; "> <a jscontent="name" jsvalues=".href:'#' + href" jstcache="14">h3
Name</a> </li> </ol> </li><li jsselect="getStaticTOC()" jstcache="9" jsinstance=
"2"> <a jscontent="name" jsvalues=".href:'#' + href" jstcache="14" href="#H2-2">
Messaging</a> <ol jstcache="0"> <li jsselect="$this.children" jstcache="22" jsin
stance="*0" style="display: none; "> <a jscontent="name" jsvalues=".href:'#' + h
ref" jstcache="14">h3Name</a> </li> </ol> </li><li jsselect="getStaticTOC()" jst
cache="9" jsinstance="3"> <a jscontent="name" jsvalues=".href:'#' + href" jstcac
he="14" href="#H2-3">Communication with the embedding page</a> <ol jstcache="0">
<li jsselect="$this.children" jstcache="22" jsinstance="*0" style="display: non
e; "> <a jscontent="name" jsvalues=".href:'#' + href" jstcache="14">h3Name</a> <
/li> </ol> </li><li jsselect="getStaticTOC()" jstcache="9" jsinstance="*4"> <a j
scontent="name" jsvalues=".href:'#' + href" jstcache="14" href="#H2-4">Referring
to extension files</a> <ol jstcache="0"> <li jsselect="$this.children" jstcache
="22" jsinstance="*0" style="display: none; "> <a jscontent="name" jsvalues=".hr
ef:'#' + href" jstcache="14">h3Name</a> </li> </ol> </li> <div jsselect="apiDefi
nition" jstcache="3" style="display: none; "> <li jstcache="0"> <a href="#apiRef
erence" jscontent="'API reference: ' + getModuleName()" jstcache="4">API referen
ce</a> <ol jstcache="0"> <li jsdisplay="$this.properties" jstcache="5"> <a href=
"#properties" jstcache="0">Properties</a> <ol jstcache="0"> <li jsselect="getPro
pertyListFromObject($this)" jstcache="10"> <a jscontent="name" jsvalues=".href:'
#property-' + name" href="#property-anchor" jstcache="41">propertyName</a> </li>
</ol> </li> <li jsdisplay="functions && functions.length > 0" jstcac
he="6"> <a href="#methods" jstcache="0">Methods</a> <ol jstcache="0"> <li jssele
ct="functions" jstcache="11"> <a jscontent="name" jsvalues=".href:'#method-' + n
ame" href="#method-anchor" jstcache="42">methodName</a> </li> </ol> </li> <li js
display="events && events.length > 0" jstcache="7"> <a href="#events"
jstcache="0">Events</a> <ol jstcache="0"> <li jsselect="events" jstcache="12">
<a jscontent="name" jsvalues=".href:'#event-' + name" href="#event-anchor" jstca
che="43">eventName</a> </li> </ol> </li> <li jsdisplay="types && types.l
ength > 0" jstcache="8"> <a href="#types" jstcache="0">Types</a> <ol jstcache
="0"> <li jsselect="types" jstcache="13"> <a jscontent="id" jsvalues=".href:'#ty
pe-' + id" href="#id-anchor" jstcache="44">id</a> </li> </ol> </li> </ol> </li>
</div> </ol> </div> <!-- /TABLE OF CONTENTS --> <!-- STATIC CONTENT PLACEHOLDER
--> <div id="static" jstcache="0"><div id="pageData-title" class="pageData" jstc
ache="0">Content Scripts</div> <div id="pageData-showTOC" class="pageData" jstca
che="0">true</div> <p jstcache="0">Content Scripts are JavaScript files that run
in the context of web pages. By using the standard <a href="http://www.w3.org/T
R/DOM-Level-2-HTML/" jstcache="0">Document Object Model</a> (DOM), they can read
details of the web pages the browser visits, or make changes to them. </p><p js
tcache="0">Some examples of things that content scripts can do include: </p><ul
jstcache="0"> <li jstcache="0">Find unlinked URLs in web pages and convert them
into hyperlinks </li><li jstcache="0">Increase the font size to make text more l
egible </li><li jstcache="0">Find and process <a href="http://microformats.org/"
jstcache="0">microformat</a> data in the DOM </li></ul> <a name="H2-0" jstcache
="0"></a><h2 id="registration" jstcache="0">Manifest</h2> <p jstcache="0">Conten
t scripts are registered in an extension's <a href="manifest.html" jstcache="0">
manifest.json</a> file, like so: </p><pre jstcache="0">{ "name": "My First Exten
sion", "version": "1.0", "description": "The first extension that I made.", <spa
n style="background:yellow; font-weight:bold;" jstcache="0"> "content_scripts":
[ { "matches": ["http://www.google.com/*"], "css": ["mystyles.css"], "js": ["jqu
ery.js", "myscript.js"] } ]</span> }</pre> <p jstcache="0">An extension can cont
ain any number of content scripts, and a content script can consist of any numbe
r of JavaScript or CSS files. The value of the <code jstcache="0">matches</code>
property controls when the content script will run. </p><p jstcache="0">Each co
ntent script registered in the manifest can specify the following properties:</p
> <table jstcache="0"> <tbody jstcache="0"><tr jstcache="0"> <th jstcache="0">Na
me</th> <th jstcache="0">Type</th> <th jstcache="0">Description</th> </tr> <tr j
stcache="0"> <td jstcache="0">matches</td> <td jstcache="0">array of strings</td
> <td jstcache="0">Required. Controls the pages this content script will be inje
cted into. See <a href="http://dev.chromium.org/developers/design-documents/exte
nsions/match-patterns" jstcache="0">Match patterns</a> for more details on the s
yntax of these strings.</td> </tr> <tr jstcache="0"> <td jstcache="0">js</td> <t
d jstcache="0"><nobr jstcache="0">array of strings</nobr></td> <td jstcache="0">
Optional. The list of JavaScript files to be injected into matching pages. These
are injected in the order they appear in this array.</td> </tr> <tr jstcache="0
"> <td jstcache="0">css</td> <td jstcache="0">array of strings</td> <td jstcache
="0">Optional. The list of CSS files to be injected into matching pages. These a
re injected in the order they appear in this array, before any DOM is constructe
d or displayed for the page.</td> </tr> <tr jstcache="0"> <td jstcache="0">run_a
t</td> <td jstcache="0">string</td> <td jstcache="0">Optional. Controls when the
files in <code jstcache="0">js</code> are injected. Can be <code jstcache="0">"
document_start"</code> or <code jstcache="0">"document_end"</code>. Defaults to
<code jstcache="0">"document_end"</code>. In the case of <code jstcache="0">"doc
ument_start"</code>, the files are injected after any files from <code jstcache=
"0">"css"</code>, but before any other DOM is constructed or any other script is
run. In the case of <code jstcache="0">"document_end"</code>, the files are inj
ected after the DOM is complete, but before subresources like images and frames
have necessarily loaded.</td> </tr> </tbody></table> <a name="H2-1" jstcache="0"
></a><h2 id="execution_environment" jstcache="0">Execution environment</h2> <p j
stcache="0">Content scripts execute in a special environment called an <em jstca
che="0">isolated world</em>. They have access to the DOM of the page they are in
jected into, but not to any JavaScript variables or functions created by the pag
e. It looks to each content script as if there is no other JavaScript executing
on the page it is running on. The same is true in reverse: JavaScript running on
the page cannot call any functions or access any variables defined by content s
cripts. </p><p jstcache="0">For example, consider this simple page: </p><pre jst
cache="0">hello.html =========== <html> <button id="button">click me
</button> <script> var greeting = "hello!"; function sayGreeting() {
alert(greeting); } document.getElementById("button").onclick = sayGreeting; <
;/script> </html></pre> <p jstcache="0">Now, suppose this content scrip
t was injected into hello.html: </p><pre jstcache="0">contentscript.js =========
========= console.log(greeting); // undefined console.log(sayGreeting); // undef
ined console.log(document.getElementById("button").onclick); // still undefined
document.getElementById("button").onclick = function() { alert("hola!"); }</pre>
<p jstcache="0">Now, if the button is pressed, you will see both greetings. </p
><p jstcache="0">Isolated worlds allow each content script to make changes to it
s JavaScript environment without worrying about conflicting with the page or wit
h other contnet scripts. For example, a content script could include JQuery v1 a
nd the page could include JQuery v2, and they wouldn't conflict with each other.
</p><p jstcache="0">Another important benefit of isolated worlds is that they c
ompletely separate the JavaScript on the page from the JavaScript in extensions.
This allows us to offer extra functionality to content scripts that should not
be accessible from web pages without worrying about web pages accessing it. </p>
<a name="H2-2" jstcache="0"></a><h2 id="messaging" jstcache="0">Messaging</h2> <
p jstcache="0">Content scripts can communicate with their parent extension using
message passing. The content script opens a channel to the extension using the
<a href="extension.html#connect" jstcache="0">chrome.extension.connect()</a> met
hod and then sends messages back and forth to it. The messages can contain any v
alid JSON object (null, boolean, number, string, array, or object). </p><p jstca
che="0">The parent extension can also open a channel to a content script in a gi
ven tab by calling <a href="tabs.html#connect" jstcache="0">chrome.tabs.connect(
tabId)</a>. </p><p jstcache="0">When a channel is opened from a content script t
o an extension, the <a href="extension.html#onConnect" jstcache="0">onConnect</a
> event is fired in all views in the extension. Any view can receive the event.
The event contains a <a href="extension.html#port" jstcache="0">Port</a> object,
which can be used by the extension view to communicate back to the content scri
pt. </p><p class="comment" jstcache="0">[TODO: Complete this]</p> <a name="H2-3"
jstcache="0"></a><h2 id="hostPageCommuncation" jstcache="0">Communication with
the embedding page</h2> <p jstcache="0">Although the execution environments of c
ontent scripts and the pages that host them are isolated from each other, they s
hare access to the page's DOM. If the page wishes to communicate with the conten
t script (or with the extension via the content script), it must do so through t
he shared DOM.</p> <p jstcache="0">An example can be accomplished using custom D
OM events and storing data in a known location. Consider: </p> <pre jstcache="0"
>http://foo.com/example.html ================================ var customEvent =
document.createEvent('Event'); customEvent.initEvent('myCustomEvent', true, true
); function fireCustomEvent(data) { hidenDiv = document.getElementById('myCustom
EventDiv'); hidenDiv.innerHTML = data hidenDiv.dispatchEvent(customEvent); }</pr
e> <pre jstcache="0">contentscript.js ===================== var port = chrome.ex
tension.connect(); document.getElementById('myCustomEventDiv').addEventListener(
'myCustomEvent', function() { var eventData = document.getElementById('myCustomE
ventDiv').innerHTML; port.postMessage({message: "myCustomEvent", values: eventDa
ta}); });</pre> <p jstcache="0">In the above example, example.html (which is not
a part of the extension) creates a custom event and then can decide to fire the
event by setting the event data to a known location in the DOM and then dispatc
hing the custom event. The content script listens for the name of the custom eve
nt on the known element and handles the event by inspecting the data of the elem
ent, and turning around to post the message to the extension process. In this wa
y the page establishes a line of communication to the extension. The reverse is
possible through similar means.</p> <a name="H2-4" jstcache="0"></a><h2 id="exte
nsionFiles" jstcache="0">Referring to extension files</h2> <p jstcache="0"> Get
the URL of an extension's file using <code jstcache="0">chrome.extension.getURL(
)</code>. You can use the result just like you would any other URL, as the follo
wing code shows. </p> <pre jstcache="0"><em jstcache="0">//Code for displaying &
lt;extensionDir>/images/myimage.png:</em> var imgURL = <b jstcache="0">chrome
.extension.getURL("images/myimage.png")</b>; document.getElementById("someImage"
).src = imgURL; </pre> </div> <!-- API PAGE --> <div class="apiPage" jsselect="a
piDefinition" jstcache="3" style="display: none; "> <a name="apiReference" jstca
che="0"></a> <h2 jscontent="'API reference: ' + getModuleName()" jstcache="4">AP
I reference: chrome.apiname </h2> <!-- PROPERTIES --> <div jsdisplay="$this.prop
erties" class="apiGroup" jstcache="5"> <a name="properties" jstcache="0"></a> <h
3 id="properties" jstcache="0">Properties</h3> <div jsselect="getPropertyListFro
mObject($this)" jstcache="10"> <a jsvalues=".name:'property-' + name" jstcache="
15"></a> <h4 jscontent="name" jstcache="16">getLastError</h4> <div class="summar
y" jstcache="0"> <!-- Note: intentionally longer 80 columns --> <span jscontent=
"getModuleName() + '.'" jstcache="23">chrome.extension</span><span jscontent="$t
his.name" jstcache="24">lastError</span> </div> <div transclude="valueTemplate"
jstcache="17"> </div> </div> </div> <!-- /apiGroup --> <!-- METHODS --> <div jsd
isplay="functions && functions.length > 0" class="apiGroup" id="metho
ds" jstcache="6"> <a name="methods" jstcache="0"></a> <h3 jstcache="0">Methods</
h3> <!-- iterates over all functions --> <div class="apiItem" jsselect="function
s" jstcache="11"> <a jsvalues=".name:'method-' + name" jstcache="18"></a> <!-- m
ethod-anchor --> <h4 jscontent="name" jstcache="16">method name</h4> <div class=
"summary" jstcache="0"><span jsdisplay="returns" jscontent="getTypeName(returns)
" jstcache="25">void</span> <!-- Note: intentionally longer 80 columns --> <span
jscontent="getFullyQualifiedFunctionName($this)" jstcache="26">chrome.module.me
thodName</span>(<span jsselect="parameters" jsvalues="class:optional ? 'optional
' : ''" jstcache="27"><span jsdisplay="$index" jstcache="33">, </span><span jsco
ntent="getTypeName($this)" jstcache="34"></span> <var jstcache="0"><span jsconte
nt="name" jstcache="16"></span></var></span>)</div> <div class="description" jst
cache="0"> <p class="todo" jsdisplay="!description" jstcache="28">Undocumented.<
/p> <p jsdisplay="description" jsvalues=".innerHTML:description" jstcache="29">
A description from the json schema def of the function goes here. </p> <!-- PARA
METERS --> <h4 jstcache="0">Parameters</h4> <dl jstcache="0"> <div jsselect="par
ameters" jstcache="35"> <!-- VALUE: This is a subtemplate that is used elsewhere
via jsTemplate *transclude* --> <div id="valueTemplate" jstcache="0"> <dt jstca
che="0"> <var jsdisplay="$this.name" jscontent="$this.name" jstcache="45">paramN
ame</var> <em jstcache="0"> <!-- TYPE --> <div style="display:inline" jstcache="
0"> ( <span class="optional" jsdisplay="optional" jstcache="46">optional</span>
<span id="typeTemplate" jstcache="0"> <span jsdisplay="getTypeRef($this)" jstcac
he="47"> <a jsvalues=".href: getTypeRefPage($this) + '#type-' + getTypeRef($this
)" jscontent="getTypeRef($this)" jstcache="49"> Type</a> </span> <span jsdisplay
="!getTypeRef($this)" jstcache="48"> <span jsdisplay="isArray($this)" jstcache="
50"> array of <span jsselect="items" jstcache="52"><span transclude="typeTemplat
e" jstcache="53"></span></span> </span> <span jsdisplay="!isArray($this)" jscont
ent="getTypeName($this)" jstcache="51">paramType</span> </span> </span> ) </div>
</em> </dt> <dd class="todo" jsdisplay="!$this.description" jstcache="38"> Undo
cumented. </dd> <dd jsdisplay="$this.description" jsvalues=".innerHTML:$this.des
cription" jstcache="39"> Description of this parameter from the json schema. </d
d> <!-- OBJECT PROPERTIES --> <dd jsdisplay="shouldExpandObject($this)" jstcache
="40"> <dl jstcache="0"> <div jsselect="getPropertyListFromObject($this)" jstcac
he="10"> <div transclude="valueTemplate" jstcache="17"> </div> </div> </dl> </dd
> </div> <!-- /VALUE --> </div> </dl> <!-- RETURNS --> <h4 jsdisplay="returns" j
stcache="30">Returns</h4> <dl jstcache="0"> <div jsselect="returns" jstcache="36
"> <div transclude="valueTemplate" jstcache="17"> </div> </div> </dl> <!-- CALLB
ACK --> <div jsdisplay="hasCallback(parameters)" jstcache="31"> <div jsselect="
getCallbackParameters(parameters)" jstcache="37"> <h4 jstcache="0">Callback func
tion</h4> <p jstcache="0"> If you specify the <em jstcache="0">callback</em> par
ameter, it should specify a function that looks like this: </p> <!-- Note: inten
tionally longer 80 columns --> <pre jstcache="0">function(<span jscontent="getSi
gnatureString(parameters)" jstcache="32">Type param1, Type param2</span>) <span
class="subdued" jstcache="0">{...}</span>);</pre> <dl jstcache="0"> <div jsselec
t="parameters" jstcache="35"> <div transclude="valueTemplate" jstcache="17"> </d
iv> </div> </dl> </div> </div> </div> <!-- /description --> </div> <!-- /apiItem
--> </div> <!-- /apiGroup --> <!-- EVENTS --> <div jsdisplay="events &&
events.length > 0" class="apiGroup" jstcache="7"> <a name="events" jstcache=
"0"></a> <h3 id="events" jstcache="0">Events</h3> <!-- iterates over all events
--> <div jsselect="events" class="apiItem" jstcache="12"> <a jsvalues=".name:'ev
ent-' + name" jstcache="19"></a> <h4 jscontent="name" jstcache="16">event name</
h4> <div class="summary" jstcache="0"> <!-- Note: intentionally longer 80 column
s --> <span jscontent="getModuleName() + '.'" class="subdued" jstcache="23">chro
me.bookmarks</span><span jscontent="name" jstcache="16">onEvent</span><span clas
s="subdued" jstcache="0">.addListener</span>(function(<span jscontent="getSignat
ureString(parameters)" jstcache="32">Type param1, Type param2</span>) <span clas
s="subdued" jstcache="0">{...}</span>); </div> <div class="description" jstcache
="0"> <p class="todo" jsdisplay="!description" jstcache="28">Undocumented.</p> <
p jsdisplay="description" jsvalues=".innerHTML:description" jstcache="29"> A des
cription from the json schema def of the event goes here. </p> <!-- PARAMETERS -
-> <h4 jstcache="0">Parameters</h4> <dl jstcache="0"> <div jsselect="parameters"
jstcache="35"> <div transclude="valueTemplate" jstcache="17"> </div> </div> </d
l> </div> <!-- /decription --> </div> <!-- /apiItem --> </div> <!-- /apiGroup --
> <!-- TYPES --> <div jsdisplay="types && types.length > 0" class="ap
iGroup" jstcache="8"> <a name="types" jstcache="0"></a> <h3 id="types" jstcache=
"0">Types</h3> <!-- iterates over all types --> <div jsselect="types" class="api
Item" jstcache="13"> <a jsvalues=".name:'type-' + id" jstcache="20"></a> <h4 jsc
ontent="id" jstcache="21">type name</h4> <div transclude="valueTemplate" jstcach
e="17"> </div> </div> <!-- /apiItem --> </div> <!-- /apiGroup --> </div> <!-- /a
piPage --> </div> <!-- /mainColumn --> </div> <!-- /pageContent --> <div id="pag
eFooter" --="" jstcache="0"> Copyright 2009. For terms of use, see the Chromium
<a href="http://src.chromium.org/viewvc/chrome/trunk/src/LICENSE" jstcache="0">l
icense</a>. </div> <!-- /pageFooter --> </div> <!-- /container --> </body></html
> |