notifications.html revision 201ade2fbba22bfb27ae029f4d23fca6ded109a0
1<!DOCTYPE html><!-- This page is a placeholder for generated extensions api doc. Note: 2 1) The <head> information in this page is significant, should be uniform 3 across api docs and should be edited only with knowledge of the 4 templating mechanism. 5 3) All <body>.innerHTML is genereated as an rendering step. If viewed in a 6 browser, it will be re-generated from the template, json schema and 7 authored overview content. 8 4) The <body>.innerHTML is also generated by an offline step so that this 9 page may easily be indexed by search engines. 10--><html xmlns="http://www.w3.org/1999/xhtml"><head> 11 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 12 <link href="css/ApiRefStyles.css" rel="stylesheet" type="text/css"> 13 <link href="css/print.css" rel="stylesheet" type="text/css" media="print"> 14 <script type="text/javascript" src="/third_party/jstemplate/jstemplate_compiled.js"> 15 </script> 16 <script type="text/javascript" src="js/api_page_generator.js"></script> 17 <script type="text/javascript" src="js/bootstrap.js"></script> 18 <script type="text/javascript" src="js/sidebar.js"></script> 19 <title>Desktop Notifications - Google Chrome Extensions - Google Code</title></head> 20 <body> <div id="gc-container" class="labs"> 21 <div id="devModeWarning"> 22 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. 23 </div> 24 <!-- SUBTEMPLATES: DO NOT MOVE FROM THIS LOCATION --> 25 <!-- In particular, sub-templates that recurse, must be used by allowing 26 jstemplate to make a copy of the template in this section which 27 are not operated on by way of the jsskip="true" --> 28 <div style="display:none"> 29 30 <!-- VALUE --> 31 <div id="valueTemplate"> 32 <dt> 33 <var>paramName</var> 34 <em> 35 36 <!-- TYPE --> 37 <div style="display:inline"> 38 ( 39 <span class="optional">optional</span> 40 <span class="enum">enumerated</span> 41 <span id="typeTemplate"> 42 <span> 43 <a> Type</a> 44 </span> 45 <span> 46 <span> 47 array of <span><span></span></span> 48 </span> 49 <span>paramType</span> 50 <span></span> 51 </span> 52 </span> 53 ) 54 </div> 55 56 </em> 57 </dt> 58 <dd class="todo"> 59 Undocumented. 60 </dd> 61 <dd> 62 Description of this parameter from the json schema. 63 </dd> 64 <dd> 65 This parameter was added in version 66 <b><span></span></b>. 67 You must omit this parameter in earlier versions, 68 and you may omit it in any version. If you require this 69 parameter, the manifest key 70 <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a> 71 can ensure that your extension won't be run in an earlier browser version. 72 </dd> 73 74 <!-- OBJECT PROPERTIES --> 75 <dd> 76 <dl> 77 <div> 78 <div> 79 </div> 80 </div> 81 </dl> 82 </dd> 83 84 <!-- FUNCTION PARAMETERS --> 85 <dd> 86 <div></div> 87 </dd> 88 89 </div> <!-- /VALUE --> 90 91 <div id="functionParametersTemplate"> 92 <h5>Parameters</h5> 93 <dl> 94 <div> 95 <div> 96 </div> 97 </div> 98 </dl> 99 </div> 100 </div> <!-- /SUBTEMPLATES --> 101 102 <a id="top"></a> 103 <div id="skipto"> 104 <a href="#gc-pagecontent">Skip to page content</a> 105 <a href="#gc-toc">Skip to main navigation</a> 106 </div> 107 <!-- API HEADER --> 108 <table id="header" width="100%" cellspacing="0" border="0"> 109 <tbody><tr> 110 <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> 111 <td valign="middle" width="100%" style="padding-left:0.6em;"> 112 <form action="http://www.google.com/cse" id="cse" style="margin-top:0.5em"> 113 <div id="gsc-search-box"> 114 <input type="hidden" name="cx" value="002967670403910741006:61_cvzfqtno"> 115 <input type="hidden" name="ie" value="UTF-8"> 116 <input type="text" name="q" value="" size="55"> 117 <input class="gsc-search-button" type="submit" name="sa" value="Search"> 118 <br> 119 <span class="greytext">e.g. "page action" or "tabs"</span> 120 </div> 121 </form> 122 123 <script type="text/javascript" src="http://www.google.com/jsapi"></script> 124 <script type="text/javascript">google.load("elements", "1", {packages: "transliteration"});</script> 125 <script type="text/javascript" src="http://www.google.com/coop/cse/t13n?form=cse&t13n_langs=en"></script> 126 <script type="text/javascript" src="http://www.google.com/coop/cse/brand?form=cse&lang=en"></script> 127 </td> 128 </tr> 129 </tbody></table> 130 131 <div id="codesiteContent" class=""> 132 133 <a id="gc-topnav-anchor"></a> 134 <div id="gc-topnav"> 135 <h1>Google Chrome Extensions (<a href="http://code.google.com/labs/">Labs</a>)</h1> 136 <ul id="home" class="gc-topnav-tabs"> 137 <li id="home_link"> 138 <a href="index.html" title="Google Chrome Extensions home page">Home</a> 139 </li> 140 <li id="docs_link"> 141 <a href="docs.html" title="Official Google Chrome Extensions documentation">Docs</a> 142 </li> 143 <li id="faq_link"> 144 <a href="faq.html" title="Answers to frequently asked questions about Google Chrome Extensions">FAQ</a> 145 </li> 146 <li id="samples_link"> 147 <a href="samples.html" title="Sample extensions (with source code)">Samples</a> 148 </li> 149 <li id="group_link"> 150 <a href="http://groups.google.com/a/chromium.org/group/chromium-extensions" title="Google Chrome Extensions developer forum">Group</a> 151 </li> 152 </ul> 153 </div> <!-- end gc-topnav --> 154 155 <div class="g-section g-tpl-170"> 156 <!-- SIDENAV --> 157 <div class="g-unit g-first" id="gc-toc"> 158 <ul> 159 <li><a href="getstarted.html">Getting Started</a></li> 160 <li><a href="overview.html">Overview</a></li> 161 <li><a href="whats_new.html">What's New?</a></li> 162 <li><h2><a href="devguide.html">Developer's Guide</a></h2> 163 <ul> 164 <li>Browser UI 165 <ul> 166 <li><a href="browserAction.html">Browser Actions</a></li> 167 <li><a href="contextMenus.html">Context Menus</a></li> 168 <li class="leftNavSelected">Desktop Notifications</li> 169 <li><a href="omnibox.html">Omnibox</a></li> 170 <li><a href="options.html">Options Pages</a></li> 171 <li><a href="override.html">Override Pages</a></li> 172 <li><a href="pageAction.html">Page Actions</a></li> 173 </ul> 174 </li> 175 <li>Browser Interaction 176 <ul> 177 <li><a href="bookmarks.html">Bookmarks</a></li> 178 <li><a href="cookies.html">Cookies</a></li> 179 <li><a href="events.html">Events</a></li> 180 <li><a href="history.html">History</a></li> 181 <li><a href="management.html">Management</a></li> 182 <li><a href="tabs.html">Tabs</a></li> 183 <li><a href="windows.html">Windows</a></li> 184 </ul> 185 </li> 186 <li>Implementation 187 <ul> 188 <li><a href="a11y.html">Accessibility</a></li> 189 <li><a href="background_pages.html">Background Pages</a></li> 190 <li><a href="content_scripts.html">Content Scripts</a></li> 191 <li><a href="xhr.html">Cross-Origin XHR</a></li> 192 <li><a href="idle.html">Idle</a></li> 193 <li><a href="i18n.html">Internationalization</a></li> 194 <li><a href="messaging.html">Message Passing</a></li> 195 <li><a href="npapi.html">NPAPI Plugins</a></li> 196 </ul> 197 </li> 198 <li>Finishing 199 <ul> 200 <li><a href="hosting.html">Hosting</a></li> 201 <li><a href="external_extensions.html">Other Deployment Options</a></li> 202 </ul> 203 </li> 204 </ul> 205 </li> 206 <li><h2><a href="apps.html">Packaged Apps</a></h2></li> 207 <li><h2><a href="tutorials.html">Tutorials</a></h2> 208 <ul> 209 <li><a href="tut_debugging.html">Debugging</a></li> 210 <li><a href="tut_analytics.html">Google Analytics</a></li> 211 <li><a href="tut_oauth.html">OAuth</a></li> 212 </ul> 213 </li> 214 <li><h2>Reference</h2> 215 <ul> 216 <li>Formats 217 <ul> 218 <li><a href="manifest.html">Manifest Files</a></li> 219 <li><a href="match_patterns.html">Match Patterns</a></li> 220 </ul> 221 </li> 222 <li><a href="permission_warnings.html">Permission Warnings</a></li> 223 <li><a href="api_index.html">chrome.* APIs</a></li> 224 <li><a href="api_other.html">Other APIs</a></li> 225 </ul> 226 </li> 227 <li><h2><a href="samples.html">Samples</a></h2></li> 228 <div class="line"> </div> 229 <li><h2>More</h2> 230 <ul> 231 <li><a href="http://code.google.com/chrome/webstore/docs/index.html">Chrome Web Store</a></li> 232 <li><a href="http://code.google.com/chrome/apps/docs/developers_guide.html">Hosted Apps</a></li> 233 <li><a href="themes.html">Themes</a></li> 234 </ul> 235 </li> 236 </ul> 237 </div> 238 <script> 239 initToggles(); 240 </script> 241 242 <div class="g-unit" id="gc-pagecontent"> 243 <div id="pageTitle"> 244 <h1 class="page_title">Desktop Notifications</h1> 245 </div> 246 <!-- TABLE OF CONTENTS --> 247 <div id="toc"> 248 <h2>Contents</h2> 249 <ol> 250 <li> 251 <a href="#manifest">Manifest</a> 252 <ol> 253 <li style="display: none; "> 254 <a>h3Name</a> 255 </li> 256 </ol> 257 </li><li> 258 <a href="#communication">Communicating with other views</a> 259 <ol> 260 <li style="display: none; "> 261 <a>h3Name</a> 262 </li> 263 </ol> 264 </li><li> 265 <a href="#examples"> Examples </a> 266 <ol> 267 <li style="display: none; "> 268 <a>h3Name</a> 269 </li> 270 </ol> 271 </li><li> 272 <a href="#api">API</a> 273 <ol> 274 <li style="display: none; "> 275 <a>h3Name</a> 276 </li> 277 </ol> 278 </li> 279 <li style="display: none; "> 280 <a href="#apiReference">API reference</a> 281 <ol> 282 <li> 283 <a href="#properties">Properties</a> 284 <ol> 285 <li> 286 <a href="#property-anchor">propertyName</a> 287 </li> 288 </ol> 289 </li> 290 <li> 291 <a href="#methods">Methods</a> 292 <ol> 293 <li> 294 <a href="#method-anchor">methodName</a> 295 </li> 296 </ol> 297 </li> 298 <li> 299 <a href="#events">Events</a> 300 <ol> 301 <li> 302 <a href="#event-anchor">eventName</a> 303 </li> 304 </ol> 305 </li> 306 <li> 307 <a href="#types">Types</a> 308 <ol> 309 <li> 310 <a href="#id-anchor">id</a> 311 </li> 312 </ol> 313 </li> 314 </ol> 315 </li> 316 </ol> 317 </div> 318 <!-- /TABLE OF CONTENTS --> 319 320 <!-- Standard content lead-in for experimental API pages --> 321 <p id="classSummary" style="display: none; "> 322 For information on how to use experimental APIs, see the <a href="experimental.html">chrome.experimental.* APIs</a> page. 323 </p> 324 325 <!-- STATIC CONTENT PLACEHOLDER --> 326 <div id="static"><div id="pageData-name" class="pageData">Desktop Notifications</div> 327<div id="pageData-showTOC" class="pageData">true</div> 328 329<!-- BEGIN AUTHORED CONTENT --> 330<p> 331Use desktop notifications to notify users that something 332important has happened. 333Notifications appear outside the browser window. 334As the following snapshots show, 335the details of how notifications look 336and where they're shown depend on the platform. 337</p> 338 339<img src="images/notification-windows.png" width="28%" style="margin:2em 0.5em 1em; border:1px solid black;" alt="Notifications on Microsoft Windows"> 340<img src="images/notification-mac.png" width="28%" style="margin:2em 0.5em 1em; border:1px solid black;" alt="Notifications on Mac OS X"> 341<img src="images/notification-linux.png" width="28%" style="margin:2em 0.5em 1em; border:1px solid black;" alt="Notifications on Ubuntu Linux"> 342 343<p> 344You create the notification window 345using a bit of JavaScript and, optionally, 346an HTML page packaged inside your extension. 347</p> 348 349 350<h2 id="manifest">Manifest</h2> 351 352<p> 353You can request the notification permission 354in the <a href="manifest.html">extension manifest</a>, 355like this: 356</p> 357 358<pre>{ 359 "name": "My extension", 360 ... 361<b> "permissions": [ 362 "notifications" 363 ]</b>, 364 ... 365}</pre> 366 367<p class="note"> 368<b>Note:</b> Extensions that declare 369the <code>notifications</code> permission 370are always allowed to create notifications. 371There is no need to call 372<code>webkitNotifications.checkPermission()</code>. 373</p> 374 375<h2 id="communication">Communicating with other views</h2> 376 377<p> 378You can communicate between a notification 379and other views in your extension using 380<a href="extension.html#method-getBackgroundPage">getBackgroundPage()</a> and 381<a href="extension.html#method-getViews">getViews()</a>. For example: 382</p> 383 384<pre>// Inside a notification... 385chrome.extension.getBackgroundPage().doThing(); 386 387// From the background page... 388chrome.extension.getViews({type:"notification"}).forEach(function(win) { 389 win.doOtherThing(); 390}); 391</pre> 392 393 394<h2 id="examples"> Examples </h2> 395 396<p> 397You can find a simple example 398of using notifications in the 399<a href="http://src.chromium.org/viewvc/chrome/trunk/src/chrome/common/extensions/docs/examples/api/notifications/">examples/api/notifications</a> 400directory. 401For other examples 402and for help in viewing the source code, 403see <a href="samples.html">Samples</a>. 404</p> 405 406<p> 407Also see html5rocks.com's 408<a href="http://www.html5rocks.com/tutorials/notifications/quick/">notifications tutorial</a>. 409Ignore the permission-related code; 410it's unnecessary if you declare the "notifications" permission. 411</p> 412 413<h2 id="api">API</h2> 414 415<p> 416The desktop notification API for extensions 417is the same one that 418is available to normal web pages. 419As the following code shows, 420you first create either a simple text notification 421or an HTML notification, 422and then you show the notification. 423</p> 424 425<pre>// Create a simple text notification: 426var notification = webkitNotifications.createNotification( 427 '48.png', // icon url - can be relative 428 'Hello!', // notification title 429 'Lorem ipsum...' // notification body text 430); 431 432// Or create an HTML notification: 433var notification = webkitNotifications.createHTMLNotification( 434 'notification.html' // html url - can be relative 435); 436 437// Then show the notification. 438notification.show(); 439</pre> 440 441<p>For complete API details, 442see the <a href="http://dev.chromium.org/developers/design-documents/desktop-notifications/api-specification">Desktop notifications draft specification</a>.</p> 443 444<!-- END AUTHORED CONTENT --> 445</div> 446 447 <!-- API PAGE --> 448 <div class="apiPage" style="display: none; "> 449 <a name="apiReference"></a> 450 <h2>API reference: chrome.apiname </h2> 451 452 <!-- PROPERTIES --> 453 <div class="apiGroup"> 454 <a name="properties"></a> 455 <h3 id="properties">Properties</h3> 456 457 <div> 458 <a></a> 459 <h4>getLastError</h4> 460 <div class="summary"> 461 <!-- Note: intentionally longer 80 columns --> 462 <span>chrome.extension</span><span>lastError</span> 463 </div> 464 <div> 465 </div> 466 </div> 467 468 </div> <!-- /apiGroup --> 469 470 <!-- METHODS --> 471 <div class="apiGroup" id="methods"> 472 <a name="methods"></a> 473 <h3>Methods</h3> 474 475 <!-- iterates over all functions --> 476 <div class="apiItem"> 477 <a></a> <!-- method-anchor --> 478 <h4>method name</h4> 479 480 <div class="summary"><span>void</span> 481 <!-- Note: intentionally longer 80 columns --> 482 <span>chrome.module.methodName</span>(<span><span>, </span><span></span> 483 <var><span></span></var></span>)</div> 484 485 <div class="description"> 486 <p class="todo">Undocumented.</p> 487 <p> 488 A description from the json schema def of the function goes here. 489 </p> 490 491 <!-- PARAMETERS --> 492 <h4>Parameters</h4> 493 <dl> 494 <div> 495 <div> 496 </div> 497 </div> 498 </dl> 499 500 <!-- RETURNS --> 501 <h4>Returns</h4> 502 <dl> 503 <div> 504 <div> 505 </div> 506 </div> 507 </dl> 508 509 <!-- CALLBACK --> 510 <div> 511 <div> 512 <h4>Callback function</h4> 513 <p> 514 The callback <em>parameter</em> should specify a function 515 that looks like this: 516 </p> 517 <p> 518 If you specify the <em>callback</em> parameter, it should 519 specify a function that looks like this: 520 </p> 521 522 <!-- Note: intentionally longer 80 columns --> 523 <pre>function(<span>Type param1, Type param2</span>) <span class="subdued">{...}</span>;</pre> 524 <dl> 525 <div> 526 <div> 527 </div> 528 </div> 529 </dl> 530 </div> 531 </div> 532 533 <!-- MIN_VERSION --> 534 <p> 535 This function was added in version <b><span></span></b>. 536 If you require this function, the manifest key 537 <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a> 538 can ensure that your extension won't be run in an earlier browser version. 539 </p> 540 </div> <!-- /description --> 541 542 </div> <!-- /apiItem --> 543 544 </div> <!-- /apiGroup --> 545 546 <!-- EVENTS --> 547 <div class="apiGroup"> 548 <a name="events"></a> 549 <h3 id="events">Events</h3> 550 551 <!-- iterates over all events --> 552 <div class="apiItem"> 553 <a></a> 554 <h4>event name</h4> 555 556 <div class="summary"> 557 <!-- Note: intentionally longer 80 columns --> 558 <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>); 559 </div> 560 561 <div class="description"> 562 <p class="todo">Undocumented.</p> 563 <p> 564 A description from the json schema def of the event goes here. 565 </p> 566 567 <!-- PARAMETERS --> 568 <h4>Parameters</h4> 569 <dl> 570 <div> 571 <div> 572 </div> 573 </div> 574 </dl> 575 576 </div> <!-- /decription --> 577 578 </div> <!-- /apiItem --> 579 580 </div> <!-- /apiGroup --> 581 582 <!-- TYPES --> 583 <div class="apiGroup"> 584 <a name="types"></a> 585 <h3 id="types">Types</h3> 586 587 <!-- iterates over all types --> 588 <div class="apiItem"> 589 <a></a> 590 <h4>type name</h4> 591 592 <div> 593 </div> 594 595 </div> <!-- /apiItem --> 596 597 </div> <!-- /apiGroup --> 598 599 </div> <!-- /apiPage --> 600 </div> <!-- /gc-pagecontent --> 601 </div> <!-- /g-section --> 602 </div> <!-- /codesiteContent --> 603 <div id="gc-footer" --=""> 604 <div class="text"> 605 <p> 606 Except as otherwise <a href="http://code.google.com/policies.html#restrictions">noted</a>, 607 the content of this page is licensed under the <a rel="license" href="http://creativecommons.org/licenses/by/3.0/">Creative Commons 608 Attribution 3.0 License</a>, and code samples are licensed under the 609 <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. 610 </p> 611 <p> 612 ©2010 Google 613 </p> 614 615<!-- begin analytics --> 616<script src="http://www.google-analytics.com/urchin.js" type="text/javascript"></script> 617<script src="http://www.google-analytics.com/ga.js" type="text/javascript"></script> 618 619<script type="text/javascript"> 620 // chrome doc tracking 621 try { 622 var engdocs = _gat._getTracker("YT-10763712-2"); 623 engdocs._trackPageview(); 624 } catch(err) {} 625 626 // code.google.com site-wide tracking 627 try { 628 _uacct="UA-18071-1"; 629 _uanchor=1; 630 _uff=0; 631 urchinTracker(); 632 } 633 catch(e) {/* urchinTracker not available. */} 634</script> 635<!-- end analytics --> 636 </div> 637 </div> <!-- /gc-footer --> 638 </div> <!-- /gc-container --> 639</body></html> 640