之前做过一些Chrome Extension方面的开发，最近无意间看到Chrome已经不再支持NPAPI插件了（Saying Goodbye to Our Old Friend NPAPI），查看其文档，现在做Chrome的扩展开发主要就是Chrome App、Chrome Extension、Native Client三种了。
另外App分为Hosted Apps和Packaged Apps，Hosted顾名思义就是应用托管到服务器上（也有crx，但crx里只有manifest文件），Packaged就是把所有资源都打包到crx中，然后下载到Chrome里安装运行。以下引用官方的解释（Extensions and Apps in the Chrome Web Store）。
There are actually two kinds of apps: hosted and packaged. A hosted app wraps an online website, so the CRX package can be as simple as a single manifest.json file pointing to the website. A packaged app contains the whole kit and kaboodle inside the CRX package—HTML, CSS, and so on, all run from the user’s hard drive.
Packaged apps are a kind of missing link between extensions and hosted apps. They look the same as a hosted app to the user, but under the covers, they are really like traditional extensions with that special “launch” parameter. They have access to almost all functionality afforded to regular extensions—context menu, background pages, and so on. The only exception is that packaged apps can’t add buttons to the address bar.
Returning to the example in the previous section, it’s perfectly valid for a packaged app to add an item to Google Chrome’s context menu. However, it’s completely invalid for a hosted app to do the same thing. In some respects, a packaged app lets you have your cake and eat it: the appearance of a packaged app with the power of an extension. But there are still plenty of reasons to use pure extensions and hosted apps.
体验了几个Chrome App，还是非常酷炫的，如Any.do、Mancala，后面有机会开发跨平台的桌面应用（游戏）就可以用Chrome App尝试！
而Native Client（还分为Portable Native Client：PNaCl和普通的Native Client：NaCl, Chrome使用的是PNaCl）则是稍微底层一点的东西，即可以使用C、C++来调用更底层的一些API，如3D Graphic、File I/O、Audio等，它是作为App和Extension可选的模块放到crx里运行的。
Native Client is a sandbox for running compiled C and C++ code in the browser efficiently and securely, independent of the user’s operating system. Portable Native Client extends that technology with architecture independence, letting developers compile their code once to run in any website and on any architecture with ahead-of-time (AOT) translation.
In short, Native Client brings the performance and low-level control of native code to modern web browsers, without sacrificing the security and portability of the web. Watch the video below for an overview of Native Client, including its goals, how it works, and how Portable Native Client lets developers run native compiled code on the web.
There are several alternatives to NPAPI. In cases where standard web technologies are not yet sufficient, developers and administrators can use NaCl, Apps, Native Messaging API, and Legacy Browser Support to transition from NPAPI. Moving forward, our goal is to evolve the standards-based web platform to cover the use cases once served by NPAPI.