• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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&amp;t13n_langs=en"></script>
136          <script type="text/javascript" src="http://www.google.com/coop/cse/brand?form=cse&amp;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>
318Leveraging HTML and JavaScript
319makes developing new extensions really easy,
320but what if you have existing legacy or proprietary code
321that you want to reuse in your extension?
322You can bundle an NPAPI plugin with your extension,
323allowing 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>
339How to develop an NPAPI plugin is outside the scope of this document.
340See <a href="https://developer.mozilla.org/en/Plugins">Mozilla's
341NPAPI plugin reference</a> for information on how to do that.
342</p>
343
344<p>
345Once you have an NPAPI plugin,
346follow 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>
399Including an NPAPI plugin in your extension is dangerous because plugins
400have unrestricted access to the local machine.  If your plugin contains
401a vulnerability, an attacker might be able to exploit that vulnerability
402to install malicious software on the user's machine.  Instead, avoid
403including an NPAPI plugin whenever possible.
404</p>
405
406<p>
407Marking your NPAPI plugin "public" increase the attack surface of your
408extension because the plugin is exposed directly to web content, making
409it easier for a malicious web site to manipulate your plugin.  Instead,
410avoid 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