Home | History | Annotate | Download | only in docs
      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>NPAPI Plugins - 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           <!-- OBJECT METHODS -->
     85           <dd>
     86             <div></div>
     87           </dd>
     88 
     89           <!-- OBJECT EVENT FIELDS -->
     90           <dd>
     91             <div></div>
     92           </dd>
     93 
     94           <!-- FUNCTION PARAMETERS -->
     95           <dd>
     96             <div></div>
     97           </dd>
     98 
     99         </div> <!-- /VALUE -->
    100 
    101         <div id="functionParametersTemplate">
    102           <h5>Parameters</h5>
    103           <dl>
    104             <div>
    105               <div>
    106               </div>
    107             </div>
    108           </dl>
    109         </div>
    110       </div> <!-- /SUBTEMPLATES -->
    111 
    112   <a id="top"></a>
    113     <div id="skipto">
    114       <a href="#gc-pagecontent">Skip to page content</a>
    115       <a href="#gc-toc">Skip to main navigation</a>
    116     </div>
    117     <!-- API HEADER -->
    118     <table id="header" width="100%" cellspacing="0" border="0">
    119       <tbody><tr>
    120         <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>
    121         <td valign="middle" width="100%" style="padding-left:0.6em;">
    122           <form action="http://www.google.com/cse" id="cse" style="margin-top:0.5em">
    123             <div id="gsc-search-box">
    124               <input type="hidden" name="cx" value="002967670403910741006:61_cvzfqtno">
    125               <input type="hidden" name="ie" value="UTF-8">
    126               <input type="text" name="q" value="" size="55">
    127               <input class="gsc-search-button" type="submit" name="sa" value="Search">
    128               <br>
    129               <span class="greytext">e.g. "page action" or "tabs"</span>
    130             </div>
    131           </form>
    132 
    133           <script type="text/javascript" src="http://www.google.com/jsapi"></script>
    134           <script type="text/javascript">google.load("elements", "1", {packages: "transliteration"});</script>
    135           <script type="text/javascript" src="http://www.google.com/coop/cse/t13n?form=cse&t13n_langs=en"></script>
    136           <script type="text/javascript" src="http://www.google.com/coop/cse/brand?form=cse&lang=en"></script>
    137         </td>
    138       </tr>
    139     </tbody></table>
    140 
    141     <div id="codesiteContent" class="">
    142 
    143       <a id="gc-topnav-anchor"></a>
    144       <div id="gc-topnav">
    145         <h1>Google Chrome Extensions (<a href="http://code.google.com/labs/">Labs</a>)</h1>
    146         <ul id="home" class="gc-topnav-tabs">
    147           <li id="home_link">
    148             <a href="index.html" title="Google Chrome Extensions home page">Home</a>
    149           </li>
    150           <li id="docs_link">
    151             <a href="docs.html" title="Official Google Chrome Extensions documentation">Docs</a>
    152           </li>
    153           <li id="faq_link">
    154             <a href="faq.html" title="Answers to frequently asked questions about Google Chrome Extensions">FAQ</a>
    155           </li>
    156           <li id="samples_link">
    157             <a href="samples.html" title="Sample extensions (with source code)">Samples</a>
    158           </li>
    159           <li id="group_link">
    160             <a href="http://groups.google.com/a/chromium.org/group/chromium-extensions" title="Google Chrome Extensions developer forum">Group</a>
    161           </li>
    162         </ul>
    163       </div> <!-- end gc-topnav -->
    164 
    165     <div class="g-section g-tpl-170">
    166       <!-- SIDENAV -->
    167       <div class="g-unit g-first" id="gc-toc">
    168         <ul>
    169           <li><a href="getstarted.html">Getting Started</a></li>
    170           <li><a href="overview.html">Overview</a></li>
    171           <li><a href="whats_new.html">What's New?</a></li>
    172           <li><h2><a href="devguide.html">Developer's Guide</a></h2>
    173             <ul>
    174               <li>Browser UI
    175                 <ul>
    176                   <li><a href="browserAction.html">Browser Actions</a></li>
    177                   <li><a href="contextMenus.html">Context Menus</a></li>
    178                   <li><a href="notifications.html">Desktop Notifications</a></li>
    179                   <li><a href="omnibox.html">Omnibox</a></li>
    180                   <li><a href="options.html">Options Pages</a></li>
    181                   <li><a href="override.html">Override Pages</a></li>
    182                   <li><a href="pageAction.html">Page Actions</a></li>
    183                 </ul>
    184               </li>
    185               <li>Browser Interaction
    186                 <ul>
    187                   <li><a href="bookmarks.html">Bookmarks</a></li>
    188                   <li><a href="cookies.html">Cookies</a></li>
    189                   <li><a href="events.html">Events</a></li>
    190                   <li><a href="history.html">History</a></li>
    191                   <li><a href="management.html">Management</a></li>
    192                   <li><a href="tabs.html">Tabs</a></li>
    193                   <li><a href="windows.html">Windows</a></li>
    194                 </ul>
    195               </li>
    196               <li>Implementation
    197                 <ul>
    198                   <li><a href="a11y.html">Accessibility</a></li>
    199                   <li><a href="background_pages.html">Background Pages</a></li>
    200                   <li><a href="content_scripts.html">Content Scripts</a></li>
    201                   <li><a href="xhr.html">Cross-Origin XHR</a></li>
    202                   <li><a href="idle.html">Idle</a></li>
    203                   <li><a href="i18n.html">Internationalization</a></li>
    204                   <li><a href="messaging.html">Message Passing</a></li>
    205                   <li class="leftNavSelected">NPAPI Plugins</li>
    206                 </ul>
    207               </li>
    208               <li>Finishing
    209                 <ul>
    210                   <li><a href="hosting.html">Hosting</a></li>
    211                   <li><a href="external_extensions.html">Other Deployment Options</a></li>
    212                 </ul>
    213               </li>
    214             </ul>
    215           </li>
    216           <li><h2><a href="apps.html">Packaged Apps</a></h2></li>
    217           <li><h2><a href="tutorials.html">Tutorials</a></h2>
    218             <ul>
    219               <li><a href="tut_debugging.html">Debugging</a></li>
    220               <li><a href="tut_analytics.html">Google Analytics</a></li>
    221               <li><a href="tut_oauth.html">OAuth</a></li>
    222             </ul>
    223           </li>
    224           <li><h2>Reference</h2>
    225             <ul>
    226               <li>Formats
    227                 <ul>
    228                   <li><a href="manifest.html">Manifest Files</a></li>
    229                   <li><a href="match_patterns.html">Match Patterns</a></li>
    230                 </ul>
    231               </li>
    232               <li><a href="permission_warnings.html">Permission Warnings</a></li>
    233               <li><a href="api_index.html">chrome.* APIs</a></li>
    234               <li><a href="api_other.html">Other APIs</a></li>
    235             </ul>
    236           </li>
    237           <li><h2><a href="samples.html">Samples</a></h2></li>
    238           <div class="line"> </div>
    239           <li><h2>More</h2>
    240             <ul>
    241               <li><a href="http://code.google.com/chrome/webstore/docs/index.html">Chrome Web Store</a></li>
    242               <li><a href="http://code.google.com/chrome/apps/docs/developers_guide.html">Hosted Apps</a></li>
    243               <li><a href="themes.html">Themes</a></li>
    244             </ul>
    245           </li>
    246         </ul>
    247       </div>
    248       <script>
    249         initToggles();
    250       </script>
    251 
    252     <div class="g-unit" id="gc-pagecontent">
    253       <div id="pageTitle">
    254         <h1 class="page_title">NPAPI Plugins</h1>
    255       </div>
    256         <!-- TABLE OF CONTENTS -->
    257         <div id="toc" style="display: none; ">
    258           <h2>Contents</h2>
    259           <ol>
    260             <li>
    261               <a>h2Name</a>
    262               <ol>
    263                 <li>
    264                   <a>h3Name</a>
    265                 </li>
    266               </ol>
    267             </li>
    268               <li>
    269                 <a href="#apiReference">API reference</a>
    270                 <ol>
    271                   <li>
    272                     <a href="#properties">Properties</a>
    273                     <ol>
    274                       <li>
    275                         <a href="#property-anchor">propertyName</a>
    276                       </li>
    277                     </ol>
    278                   </li>
    279                   <li>
    280                     <a>Methods</a>
    281                     <ol>
    282                       <li>
    283                         <a href="#method-anchor">methodName</a>
    284                       </li>
    285                     </ol>
    286                   </li>
    287                   <li>
    288                     <a>Events</a>
    289                     <ol>
    290                       <li>
    291                         <a href="#event-anchor">eventName</a>
    292                       </li>
    293                     </ol>
    294                   </li>
    295                   <li>
    296                     <a href="#types">Types</a>
    297                     <ol>
    298                       <li>
    299                         <a href="#id-anchor">id</a>
    300                       </li>
    301                     </ol>
    302                   </li>
    303                 </ol>
    304               </li>
    305           </ol>
    306         </div>
    307         <!-- /TABLE OF CONTENTS -->
    308 
    309         <!-- Standard content lead-in for experimental API pages -->
    310         <p id="classSummary" style="display: none; ">
    311           For information on how to use experimental APIs, see the <a href="experimental.html">chrome.experimental.* APIs</a> page.
    312         </p>
    313 
    314         <!-- STATIC CONTENT PLACEHOLDER -->
    315         <div id="static"><div id="pageData-name" class="pageData">NPAPI Plugins</div>
    316 
    317 <p>
    318 Leveraging HTML and JavaScript
    319 makes developing new extensions really easy,
    320 but what if you have existing legacy or proprietary code
    321 that you want to reuse in your extension?
    322 You can bundle an NPAPI plugin with your extension,
    323 allowing you to call into native binary code from JavaScript.
    324 </p>
    325 
    326 <h2>Warning</h2>
    327 
    328 <p align="center"><b>NPAPI is a really big hammer that should only be used when no other approach will work.</b>
    329 
    330 </p><p>Code running in an NPAPI plugin has the full permissions of the current user and is not sandboxed or shielded from malicious input by Google Chrome in any way. You should be especially cautious when processing input from untrusted sources, such as when working with <a href="content_scripts.html#security-considerations">content scripts</a> or XMLHttpRequest.
    331 
    332 </p><p>Because of the additional security risks NPAPI poses to users, extensions that use it will require manual review before being accepted in the
    333 <a href="https://chrome.google.com/webstore">web store</a> or 
    334 <a href="https://chrome.google.com/extensions">extension gallery</a>.
    335 
    336 </p><h2>Details</h2>
    337 
    338 <p>
    339 How to develop an NPAPI plugin is outside the scope of this document.
    340 See <a href="https://developer.mozilla.org/en/Plugins">Mozilla's
    341 NPAPI plugin reference</a> for information on how to do that.
    342 </p>
    343 
    344 <p>
    345 Once you have an NPAPI plugin,
    346 follow these steps to get your extension using it.
    347 </p>
    348 
    349 <ol>
    350   <li>
    351     Add a section to your extension's <code>manifest.json</code>
    352     that describes where to find the plugin,
    353     along with other properties about it:
    354 
    355 <pre>{
    356   "name": "My extension",
    357   ...
    358   <b>"plugins": [
    359     { "path": "content_plugin.dll", "public": true },
    360     { "path": "extension_plugin.dll" }
    361   ]</b>,
    362   ...
    363 }</pre>
    364 
    365     <p>
    366     The "path" property specifies the path to your plugin,
    367     relative to the manifest file.
    368     The "public" property specifies whether
    369     your plugin can be accessed by regular web pages;
    370     the default is false,
    371     meaning only your extension can load the plugin.
    372     </p>
    373    </li>
    374 
    375    <li>
    376      Create an HTML file that loads your plugin by mime-type.
    377      Assuming your mime-type is "application/x-my-extension":
    378 
    379 <pre>&lt;embed type="application/x-my-extension" id="pluginId"&gt;
    380 &lt;script&gt;
    381   var plugin = document.getElementById("pluginId");
    382   var result = plugin.myPluginMethod();  // call a method in your plugin
    383   console.log("my plugin returned: " + result);
    384 &lt;/script&gt;</pre>
    385 
    386      <p>
    387      This can be inside a background page
    388      or any other HTML page used by your extension.
    389      If your plugin is "public",
    390      you can even use a content script to programmatically
    391      insert your plugin into a web page.
    392      </p>
    393    </li>
    394 </ol>
    395 
    396 <h2 id="security-considerations">Security considerations</h2>
    397 
    398 <p>
    399 Including an NPAPI plugin in your extension is dangerous because plugins
    400 have unrestricted access to the local machine.  If your plugin contains
    401 a vulnerability, an attacker might be able to exploit that vulnerability
    402 to install malicious software on the user's machine.  Instead, avoid
    403 including an NPAPI plugin whenever possible.
    404 </p>
    405 
    406 <p>
    407 Marking your NPAPI plugin "public" increase the attack surface of your
    408 extension because the plugin is exposed directly to web content, making
    409 it easier for a malicious web site to manipulate your plugin.  Instead,
    410 avoid making your NPAPI plugin public whenever possible.
    411 </p>
    412 
    413 </div>
    414 
    415         <!-- API PAGE -->
    416         <div class="apiPage" style="display: none; ">
    417         <a name="apiReference"></a>
    418         <h2>API reference: chrome.apiname </h2>
    419 
    420           <!-- PROPERTIES -->
    421           <div class="apiGroup">
    422             <a name="properties"></a>
    423             <h3 id="properties">Properties</h3>
    424 
    425             <div>
    426               <a></a>
    427               <h4>getLastError</h4>
    428               <div class="summary">
    429                 <!-- Note: intentionally longer 80 columns -->
    430                 <span>chrome.extension</span><span>lastError</span>
    431               </div>
    432               <div>
    433               </div>
    434             </div>
    435 
    436           </div> <!-- /apiGroup -->
    437 
    438           <!-- METHODS -->
    439           <div id="methodsTemplate" class="apiGroup">
    440             <a></a>
    441             <h3>Methods</h3>
    442 
    443             <!-- iterates over all functions -->
    444             <div class="apiItem">
    445               <a></a> <!-- method-anchor -->
    446               <h4>method name</h4>
    447 
    448               <div class="summary"><span>void</span>
    449                   <!-- Note: intentionally longer 80 columns -->
    450                   <span>chrome.module.methodName</span>(<span><span>, </span><span></span>
    451                       <var><span></span></var></span>)</div>
    452 
    453               <div class="description">
    454                 <p class="todo">Undocumented.</p>
    455                 <p>
    456                   A description from the json schema def of the function goes here.
    457                 </p>
    458 
    459                 <!-- PARAMETERS -->
    460                 <h4>Parameters</h4>
    461                 <dl>
    462                   <div>
    463                     <div>
    464                     </div>
    465                   </div>
    466                 </dl>
    467 
    468                 <!-- RETURNS -->
    469                 <h4>Returns</h4>
    470                 <dl>
    471                   <div>
    472                     <div>
    473                     </div>
    474                   </div>
    475                 </dl>
    476 
    477                 <!-- CALLBACK -->
    478                 <div>
    479                   <div>
    480                   <h4>Callback function</h4>
    481                   <p>
    482                     The callback <em>parameter</em> should specify a function
    483                     that looks like this:
    484                   </p>
    485                   <p>
    486                     If you specify the <em>callback</em> parameter, it should
    487                     specify a function that looks like this:
    488                   </p>
    489 
    490                   <!-- Note: intentionally longer 80 columns -->
    491                   <pre>function(<span>Type param1, Type param2</span>) <span class="subdued">{...}</span>;</pre>
    492                   <dl>
    493                     <div>
    494                       <div>
    495                       </div>
    496                     </div>
    497                   </dl>
    498                   </div>
    499                 </div>
    500 
    501                 <!-- MIN_VERSION -->
    502                 <p>
    503                   This function was added in version <b><span></span></b>.
    504                   If you require this function, the manifest key
    505                   <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
    506                   can ensure that your extension won't be run in an earlier browser version.
    507                 </p>
    508               </div> <!-- /description -->
    509 
    510             </div>  <!-- /apiItem -->
    511 
    512           </div>  <!-- /apiGroup -->
    513 
    514           <!-- EVENTS -->
    515           <div id="eventsTemplate" class="apiGroup">
    516             <a></a>
    517             <h3>Events</h3>
    518             <!-- iterates over all events -->
    519             <div class="apiItem">
    520               <a></a>
    521               <h4>event name</h4>
    522 
    523               <div class="summary">
    524                 <!-- Note: intentionally longer 80 columns -->
    525                 <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>);
    526               </div>
    527 
    528               <div class="description">
    529                 <p class="todo">Undocumented.</p>
    530                 <p>
    531                   A description from the json schema def of the event goes here.
    532                 </p>
    533 
    534                 <!-- PARAMETERS -->
    535                 <div>
    536                   <h4>Parameters</h4>
    537                   <dl>
    538                     <div>
    539                       <div>
    540                       </div>
    541                     </div>
    542                   </dl>
    543                 </div>
    544               </div> <!-- /decription -->
    545 
    546             </div> <!-- /apiItem -->
    547 
    548           </div> <!-- /apiGroup -->
    549 
    550           <!-- TYPES -->
    551           <div class="apiGroup">
    552             <a name="types"></a>
    553             <h3 id="types">Types</h3>
    554 
    555             <!-- iterates over all types -->
    556             <div class="apiItem">
    557               <a></a>
    558               <h4>type name</h4>
    559 
    560               <div>
    561               </div>
    562 
    563             </div> <!-- /apiItem -->
    564 
    565           </div> <!-- /apiGroup -->
    566 
    567         </div> <!-- /apiPage -->
    568       </div> <!-- /gc-pagecontent -->
    569     </div> <!-- /g-section -->
    570   </div> <!-- /codesiteContent -->
    571     <div id="gc-footer" --="">
    572       <div class="text">
    573   <p>
    574   Except as otherwise <a href="http://code.google.com/policies.html#restrictions">noted</a>,
    575   the content of this page is licensed under the <a rel="license" href="http://creativecommons.org/licenses/by/3.0/">Creative Commons
    576   Attribution 3.0 License</a>, and code samples are licensed under the
    577   <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>.
    578   </p>
    579   <p>
    580   2011 Google
    581   </p>
    582 
    583 <!-- begin analytics -->
    584 <script src="http://www.google-analytics.com/urchin.js" type="text/javascript"></script>
    585 <script src="http://www.google-analytics.com/ga.js" type="text/javascript"></script>
    586 
    587 <script type="text/javascript">
    588   // chrome doc tracking
    589   try {
    590     var engdocs = _gat._getTracker("YT-10763712-2");
    591     engdocs._trackPageview();
    592   } catch(err) {}
    593 
    594   // code.google.com site-wide tracking
    595   try {
    596     _uacct="UA-18071-1";
    597     _uanchor=1;
    598     _uff=0;
    599     urchinTracker();
    600   }
    601   catch(e) {/* urchinTracker not available. */}
    602 </script>
    603 <!-- end analytics -->
    604       </div>
    605     </div> <!-- /gc-footer -->
    606   </div> <!-- /gc-container -->
    607 </body></html>
    608