<!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 mechanism.
3) All <body>.innerHTML is genereated 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>.innerHTML is also generated by an offline step so that this
page may easily be indexed by search engines.
--><html xmlns="http://www.w3.org/1999/xhtml"><head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link href="css/ApiRefStyles.css" rel="stylesheet" type="text/css">
<link href="css/print.css" rel="stylesheet" type="text/css" media="print">
<script type="text/javascript" src="../../../third_party/jstemplate/jstemplate_compiled.js">
</script>
<script type="text/javascript" src="js/api_page_generator.js"></script>
<script type="text/javascript" src="js/bootstrap.js"></script>
<script type="text/javascript" src="js/sidebar.js"></script>
<title>Match Patterns - Google Chrome Extensions - Google Code</title></head>
<body> <div id="gc-container" class="labs">
<div id="devModeWarning">
You are viewing extension docs in chrome via the 'file:' scheme: are you expecting to see local changes when you refresh? You'll need run chrome with --allow-file-access-from-files.
</div>
<!-- SUBTEMPLATES: DO NOT MOVE FROM THIS LOCATION -->
<!-- In particular, sub-templates that recurse, must be used by allowing
jstemplate to make a copy of the template in this section which
are not operated on by way of the jsskip="true" -->
<div style="display:none">
<!-- VALUE -->
<div id="valueTemplate">
<dt>
<var>paramName</var>
<em>
<!-- TYPE -->
<div style="display:inline">
(
<span class="optional">optional</span>
<span class="enum">enumerated</span>
<span id="typeTemplate">
<span>
<a> Type</a>
</span>
<span>
<span>
array of <span><span></span></span>
</span>
<span>paramType</span>
<span></span>
</span>
</span>
)
</div>
</em>
</dt>
<dd class="todo">
Undocumented.
</dd>
<dd>
Description of this parameter from the json schema.
</dd>
<dd>
This parameter was added in version
<b><span></span></b>.
You must omit this parameter in earlier versions,
and you may omit it in any version. If you require this
parameter, the manifest key
<a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
can ensure that your extension won't be run in an earlier browser version.
</dd>
<!-- OBJECT PROPERTIES -->
<dd>
<dl>
<div>
<div>
</div>
</div>
</dl>
</dd>
<!-- OBJECT METHODS -->
<dd>
<div></div>
</dd>
<!-- OBJECT EVENT FIELDS -->
<dd>
<div></div>
</dd>
<!-- FUNCTION PARAMETERS -->
<dd>
<div></div>
</dd>
</div> <!-- /VALUE -->
<div id="functionParametersTemplate">
<h5>Parameters</h5>
<dl>
<div>
<div>
</div>
</div>
</dl>
</div>
</div> <!-- /SUBTEMPLATES -->
<a id="top"></a>
<div id="skipto">
<a href="#gc-pagecontent">Skip to page content</a>
<a href="#gc-toc">Skip to main navigation</a>
</div>
<!-- API HEADER -->
<table id="header" width="100%" cellspacing="0" border="0">
<tbody><tr>
<td valign="middle"><a href="http://code.google.com/"><img src="images/code_labs_logo.gif" height="43" width="161" alt="Google Code Labs" style="border:0; margin:0;"></a></td>
<td valign="middle" width="100%" style="padding-left:0.6em;">
<form action="http://www.google.com/cse" id="cse" style="margin-top:0.5em">
<div id="gsc-search-box">
<input type="hidden" name="cx" value="002967670403910741006:61_cvzfqtno">
<input type="hidden" name="ie" value="UTF-8">
<input type="text" name="q" value="" size="55">
<input class="gsc-search-button" type="submit" name="sa" value="Search">
<br>
<span class="greytext">e.g. "page action" or "tabs"</span>
</div>
</form>
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript">google.load("elements", "1", {packages: "transliteration"});</script>
<script type="text/javascript" src="http://www.google.com/coop/cse/t13n?form=cse&t13n_langs=en"></script>
<script type="text/javascript" src="http://www.google.com/coop/cse/brand?form=cse&lang=en"></script>
</td>
</tr>
</tbody></table>
<div id="codesiteContent" class="">
<a id="gc-topnav-anchor"></a>
<div id="gc-topnav">
<h1>Google Chrome Extensions (<a href="http://code.google.com/labs/">Labs</a>)</h1>
<ul id="home" class="gc-topnav-tabs">
<li id="home_link">
<a href="index.html" title="Google Chrome Extensions home page">Home</a>
</li>
<li id="docs_link">
<a href="docs.html" title="Official Google Chrome Extensions documentation">Docs</a>
</li>
<li id="faq_link">
<a href="faq.html" title="Answers to frequently asked questions about Google Chrome Extensions">FAQ</a>
</li>
<li id="samples_link">
<a href="samples.html" title="Sample extensions (with source code)">Samples</a>
</li>
<li id="group_link">
<a href="http://groups.google.com/a/chromium.org/group/chromium-extensions" title="Google Chrome Extensions developer forum">Group</a>
</li>
</ul>
</div> <!-- end gc-topnav -->
<div class="g-section g-tpl-170">
<!-- SIDENAV -->
<div class="g-unit g-first" id="gc-toc">
<ul>
<li><a href="getstarted.html">Getting Started</a></li>
<li><a href="overview.html">Overview</a></li>
<li><a href="whats_new.html">What's New?</a></li>
<li><h2><a href="devguide.html">Developer's Guide</a></h2>
<ul>
<li>Browser UI
<ul>
<li><a href="browserAction.html">Browser Actions</a></li>
<li><a href="contextMenus.html">Context Menus</a></li>
<li><a href="notifications.html">Desktop Notifications</a></li>
<li><a href="omnibox.html">Omnibox</a></li>
<li><a href="options.html">Options Pages</a></li>
<li><a href="override.html">Override Pages</a></li>
<li><a href="pageAction.html">Page Actions</a></li>
</ul>
</li>
<li>Browser Interaction
<ul>
<li><a href="bookmarks.html">Bookmarks</a></li>
<li><a href="cookies.html">Cookies</a></li>
<li><a href="events.html">Events</a></li>
<li><a href="history.html">History</a></li>
<li><a href="management.html">Management</a></li>
<li><a href="tabs.html">Tabs</a></li>
<li><a href="windows.html">Windows</a></li>
</ul>
</li>
<li>Implementation
<ul>
<li><a href="a11y.html">Accessibility</a></li>
<li><a href="background_pages.html">Background Pages</a></li>
<li><a href="content_scripts.html">Content Scripts</a></li>
<li><a href="xhr.html">Cross-Origin XHR</a></li>
<li><a href="idle.html">Idle</a></li>
<li><a href="i18n.html">Internationalization</a></li>
<li><a href="messaging.html">Message Passing</a></li>
<li><a href="npapi.html">NPAPI Plugins</a></li>
</ul>
</li>
<li>Finishing
<ul>
<li><a href="hosting.html">Hosting</a></li>
<li><a href="external_extensions.html">Other Deployment Options</a></li>
</ul>
</li>
</ul>
</li>
<li><h2><a href="apps.html">Packaged Apps</a></h2></li>
<li><h2><a href="tutorials.html">Tutorials</a></h2>
<ul>
<li><a href="tut_debugging.html">Debugging</a></li>
<li><a href="tut_analytics.html">Google Analytics</a></li>
<li><a href="tut_oauth.html">OAuth</a></li>
</ul>
</li>
<li><h2>Reference</h2>
<ul>
<li>Formats
<ul>
<li><a href="manifest.html">Manifest Files</a></li>
<li class="leftNavSelected">Match Patterns</li>
</ul>
</li>
<li><a href="permission_warnings.html">Permission Warnings</a></li>
<li><a href="api_index.html">chrome.* APIs</a></li>
<li><a href="api_other.html">Other APIs</a></li>
</ul>
</li>
<li><h2><a href="samples.html">Samples</a></h2></li>
<div class="line"> </div>
<li><h2>More</h2>
<ul>
<li><a href="http://code.google.com/chrome/webstore/docs/index.html">Chrome Web Store</a></li>
<li><a href="http://code.google.com/chrome/apps/docs/developers_guide.html">Hosted Apps</a></li>
<li><a href="themes.html">Themes</a></li>
</ul>
</li>
</ul>
</div>
<script>
initToggles();
</script>
<div class="g-unit" id="gc-pagecontent">
<div id="pageTitle">
<h1 class="page_title">Match Patterns</h1>
</div>
<!-- TABLE OF CONTENTS -->
<div id="toc" style="display: none; ">
<h2>Contents</h2>
<ol>
<li>
<a>h2Name</a>
<ol>
<li>
<a>h3Name</a>
</li>
</ol>
</li>
<li>
<a href="#apiReference">API reference</a>
<ol>
<li>
<a href="#properties">Properties</a>
<ol>
<li>
<a href="#property-anchor">propertyName</a>
</li>
</ol>
</li>
<li>
<a>Methods</a>
<ol>
<li>
<a href="#method-anchor">methodName</a>
</li>
</ol>
</li>
<li>
<a>Events</a>
<ol>
<li>
<a href="#event-anchor">eventName</a>
</li>
</ol>
</li>
<li>
<a href="#types">Types</a>
<ol>
<li>
<a href="#id-anchor">id</a>
</li>
</ol>
</li>
</ol>
</li>
</ol>
</div>
<!-- /TABLE OF CONTENTS -->
<!-- Standard content lead-in for experimental API pages -->
<p id="classSummary" style="display: none; ">
For information on how to use experimental APIs, see the <a href="experimental.html">chrome.experimental.* APIs</a> page.
</p>
<!-- STATIC CONTENT PLACEHOLDER -->
<div id="static"><div id="pageData-name" class="pageData">Match Patterns</div>
<p>
<a href="content_scripts.html">Content scripts</a> operate on
a set of URLs defined by match patterns.
You can put one or more match patterns
in the <code>"matches"</code> part of
a content script's section of the manifest.
This page describes the match pattern syntax —
the rules you need to follow when you specify
which URLs your content script affects.
</p>
<p>
A match pattern is essentially a URL
that begins with a permitted scheme (<code>http</code>,
<code>https</code>, <code>file</code>, or <code>ftp</code>),
and that can contain '<code>*</code>' characters.
The special pattern
<code><all_urls></code> matches any URL
that starts with a permitted scheme.
Each match pattern has 3 parts:</p>
<p></p>
<ul>
<li> <em>scheme</em> —
for example, <code>http</code> or <code>file</code>
or <code>*</code>
<p class="note">
<b>Note:</b>
Access to <code>file</code> URLs isn't automatic.
The user must visit the extensions management page
and opt in to <code>file</code> access for each extension that requests it.
</p>
</li>
<li> <em>host</em> —
for example, <code>www.google.com</code>
or <code>*.google.com</code>
or <code>*</code>;
if the scheme is <code>file</code>,
there is no <em>host</em> part
</li>
<li> <em>path</em> —
for example, <code>/*</code>, <code>/foo* </code>,
or <code>/foo/bar </code>
</li>
</ul>
<p>Here's the basic syntax:</p>
<pre><em><url-pattern></em> := <em><scheme></em>://<em><host></em><em><path></em>
<em><scheme></em> := '*' | 'http' | 'https' | 'file' | 'ftp'
<em><host></em> := '*' | '*.' <em><any char except '/' and '*'></em>+
<em><path></em> := '/' <em><any chars></em>
</pre>
<p>
The meaning of '<code>*</code>' depends on whether
it's in the <em>scheme</em>, <em>host</em>, or <em>path</em> part.
If the <em>scheme</em> is <code>*</code>,
then it matches either <code>http</code> or <code>https</code>.
If the <em>host</em> is just <code>*</code>,
then it matches any host.
If the <em>host</em> is <code>*.<em>hostname</em></code>,
then it matches the specified host or any of its subdomains.
In the <em>path</em> section,
each '<code>*</code>' matches 0 or more characters.
The following table shows some valid patterns.
</p>
<table class="columns">
<tbody>
<tr>
<th style="margin-left:0; padding-left:0">Pattern</th>
<th style="margin-left:0; padding-left:0">What it does</th>
<th style="margin-left:0; padding-left:0">Examples of matching URLs</th>
</tr>
<tr>
<td>
<code>http://*/*</code>
</td>
<td>Matches any URL that uses the <code>http</code> scheme</td>
<td>
http://www.google.com/<br>
http://example.org/foo/bar.html
</td>
</tr>
<tr>
<td>
<code>http://*/foo*</code>
</td>
<td>
Matches any URL that uses the <code>http</code> scheme, on any host,
as long as the path starts with <code>/foo</code>
</td>
<td>
http://example.com/foo/bar.html<br>
http://www.google.com/foo<b></b>
</td>
</tr>
<tr>
<td>
<code>https://*.google.com/foo*bar </code>
</td>
<td>
Matches any URL that uses the <code>https</code> scheme,
is on a google.com host
(such as www.google.com, docs.google.com, or google.com),
as long as the path starts with <code>/foo</code>
and ends with <code>bar</code>
</td>
<td>
http://www.google.com/foo/baz/bar<br>
http://docs.google.com/foobar
</td>
</tr>
<tr>
<td>
<code>http://example.org/foo/bar.html </code>
</td>
<td>Matches the specified URL</td>
<td>
http://example.org/foo/bar.html
</td>
</tr>
<tr>
<td>
<code>file:///foo*</code>
</td>
<td>Matches any local file whose path starts with <code>/foo</code>
</td>
<td>
file:///foo/bar.html<br>
file:///foo
</td>
</tr>
<tr>
<td>
<code>http://127.0.0.1/*</code>
</td>
<td>
Matches any URL that uses the <code>http</code> scheme
and is on the host 127.0.0.1
</td>
<td>
http://127.0.0.1/<br>
http://127.0.0.1/foo/bar.html
</td>
</tr>
<tr>
<td>
<code>*://mail.google.com/* </code>
</td>
<td>
Matches any URL that starts with
<code>http://mail.google.com</code> or
<code>https://mail.google.com</code>.
</td>
<td>
http://mail.google.com/foo/baz/bar<br>
https://mail.google.com/foobar
</td>
</tr>
<tr>
<td>
<code><all_urls></code>
</td>
<td>
Matches any URL that uses a permitted scheme.
(See the beginning of this section for the list of permitted
schemes.)
</td>
<td>
http://example.org/foo/bar.html<br>
file:///bar/baz.html
</td>
</tr>
</tbody>
</table>
<p>
Here are some examples of <em>invalid</em> pattern matches:
</p>
<table class="columns">
<tbody>
<tr>
<th style="margin-left:0; padding-left:0">Bad pattern</th>
<th style="margin-left:0; padding-left:0">Why it's bad</th>
</tr>
<tr>
<td><code>http://www.google.com</code></td>
<td>No <em>path</em></td>
</tr>
<tr>
<td><code>http://*foo/bar</code></td>
<td>'*' in the <em>host</em> can be followed only by a '.' or '/'</td>
</tr>
<tr>
<td><code>http://foo.*.bar/baz </code></td>
<td>If '*' is in the <em>host</em>, it must be the first character</td>
</tr>
<tr>
<td><code>http:/bar</code></td>
<td>Missing <em>scheme</em> separator ("/" should be "//")</td>
</tr>
<tr>
<td><code>foo://*</code></td>
<td>Invalid <em>scheme</em></td>
</tr>
</tbody>
</table>
</div>
<!-- API PAGE -->
<div class="apiPage" style="display: none; ">
<a name="apiReference"></a>
<h2>API reference: chrome.apiname </h2>
<!-- PROPERTIES -->
<div class="apiGroup">
<a name="properties"></a>
<h3 id="properties">Properties</h3>
<div>
<a></a>
<h4>getLastError</h4>
<div class="summary">
<!-- Note: intentionally longer 80 columns -->
<span>chrome.extension</span><span>lastError</span>
</div>
<div>
</div>
</div>
</div> <!-- /apiGroup -->
<!-- METHODS -->
<div id="methodsTemplate" class="apiGroup">
<a></a>
<h3>Methods</h3>
<!-- iterates over all functions -->
<div class="apiItem">
<a></a> <!-- method-anchor -->
<h4>method name</h4>
<div class="summary"><span>void</span>
<!-- Note: intentionally longer 80 columns -->
<span>chrome.module.methodName</span>(<span><span>, </span><span></span>
<var><span></span></var></span>)</div>
<div class="description">
<p class="todo">Undocumented.</p>
<p>
A description from the json schema def of the function goes here.
</p>
<!-- PARAMETERS -->
<h4>Parameters</h4>
<dl>
<div>
<div>
</div>
</div>
</dl>
<!-- RETURNS -->
<h4>Returns</h4>
<dl>
<div>
<div>
</div>
</div>
</dl>
<!-- CALLBACK -->
<div>
<div>
<h4>Callback function</h4>
<p>
The callback <em>parameter</em> should specify a function
that looks like this:
</p>
<p>
If you specify the <em>callback</em> parameter, it should
specify a function that looks like this:
</p>
<!-- Note: intentionally longer 80 columns -->
<pre>function(<span>Type param1, Type param2</span>) <span class="subdued">{...}</span>;</pre>
<dl>
<div>
<div>
</div>
</div>
</dl>
</div>
</div>
<!-- MIN_VERSION -->
<p>
This function was added in version <b><span></span></b>.
If you require this function, the manifest key
<a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
can ensure that your extension won't be run in an earlier browser version.
</p>
</div> <!-- /description -->
</div> <!-- /apiItem -->
</div> <!-- /apiGroup -->
<!-- EVENTS -->
<div id="eventsTemplate" class="apiGroup">
<a></a>
<h3>Events</h3>
<!-- iterates over all events -->
<div class="apiItem">
<a></a>
<h4>event name</h4>
<div class="summary">
<!-- Note: intentionally longer 80 columns -->
<span class="subdued">chrome.bookmarks</span><span>onEvent</span><span class="subdued">.addListener</span>(function(<span>Type param1, Type param2</span>) <span class="subdued">{...}</span>);
</div>
<div class="description">
<p class="todo">Undocumented.</p>
<p>
A description from the json schema def of the event goes here.
</p>
<!-- PARAMETERS -->
<div>
<h4>Parameters</h4>
<dl>
<div>
<div>
</div>
</div>
</dl>
</div>
</div> <!-- /decription -->
</div> <!-- /apiItem -->
</div> <!-- /apiGroup -->
<!-- TYPES -->
<div class="apiGroup">
<a name="types"></a>
<h3 id="types">Types</h3>
<!-- iterates over all types -->
<div class="apiItem">
<a></a>
<h4>type name</h4>
<div>
</div>
</div> <!-- /apiItem -->
</div> <!-- /apiGroup -->
</div> <!-- /apiPage -->
</div> <!-- /gc-pagecontent -->
</div> <!-- /g-section -->
</div> <!-- /codesiteContent -->
<div id="gc-footer" --="">
<div class="text">
<p>
Except as otherwise <a href="http://code.google.com/policies.html#restrictions">noted</a>,
the content of this page is licensed under the <a rel="license" href="http://creativecommons.org/licenses/by/3.0/">Creative Commons
Attribution 3.0 License</a>, and code samples are licensed under the
<a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>.
</p>
<p>
©2011 Google
</p>
<!-- begin analytics -->
<script src="http://www.google-analytics.com/urchin.js" type="text/javascript"></script>
<script src="http://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
// chrome doc tracking
try {
var engdocs = _gat._getTracker("YT-10763712-2");
engdocs._trackPageview();
} catch(err) {}
// code.google.com site-wide tracking
try {
_uacct="UA-18071-1";
_uanchor=1;
_uff=0;
urchinTracker();
}
catch(e) {/* urchinTracker not available. */}
</script>
<!-- end analytics -->
</div>
</div> <!-- /gc-footer -->
</div> <!-- /gc-container -->
</body></html>