AngularJS を使用したアプリの作成

このガイドでは、AngularJS MVC フレームワークを使用して Chrome アプリを構築する方法について説明します。Angular の動作を説明するために、このフレームワークを使用して構築された実際のアプリである Google ドライブ アップローダーを参照します。ソースコードは GitHub で入手できます。

アプリについて

Google ドライブ アップローダ

Google ドライブ アップローダを使用すると、Google ドライブ アカウントに保存されているファイルをすばやく表示して操作できるほか、HTML Drag and Drop API を使用して新しいファイルをアップロードすることもできます。これは、Google の API の 1 つ(この場合は Google Drive API)と通信するアプリを構築する好例です。

アップロードしたユーザーは OAuth2 を使用してユーザーのデータにアクセスします。ログインしているユーザーの OAuth トークンの取得は chrome.identity API が処理するため、面倒な作業は Google 側で行われます。長期間有効なアクセス トークンを取得したら、アプリは Google Drive API を使用してユーザーのデータにアクセスします。

このアプリの主な機能:

  • AngularJS の CSP の自動検出
  • Google Drive API から取得したファイルのリストをレンダリングする
  • ファイル アイコンをオフラインに保存する HTML5 Filesystem API
  • HTML5 ドラッグ&ドロップ: デスクトップから新しいファイルをインポート/アップロード
  • XHR2 による画像の読み込み(クロスドメイン)
  • chrome.identity API(OAuth 認証用)
  • アプリ独自のナビゲーション バーのデザインを定義するクロムレス フレーム

マニフェストの作成

すべての Chrome アプリに manifest.json ファイルが必要です。このファイルには、Chrome がアプリを起動するために必要な情報が含まれています。マニフェストには関連するメタデータと、アプリの実行に必要な特別な権限のリストが含まれています。

アップロードしたユーザーのマニフェストを短縮したバージョンは次のようになります。

{
  "name": "Google Drive Uploader",
  "version": "0.0.1",
  "manifest_version": 2,
  "oauth2": {
    "client_id": "665859454684.apps.googleusercontent.com",
    "scopes": [
      "https://www.googleapis.com/auth/drive"
    ]
  },
 ...
  "permissions": [
    "https://docs.google.com/feeds/",
    "https://docs.googleusercontent.com/",
    "https://spreadsheets.google.com/feeds/",
    "https://ssl.gstatic.com/",
    "https://www.googleapis.com/"
  ]
}

このマニフェストで最も重要な部分は、「oauth2」と「permissions」のセクションです。

「oauth2」セクションは、OAuth2 が動作するために必要なパラメータを定義します。「client_id」を作成するには、クライアント ID を取得するの手順に沿って操作します。「スコープ」には、OAuth トークンが有効となる認可スコープ(アプリがアクセスする API など)がリストされます。

「permissions」セクションには、アプリが XHR2 を介してアクセスする URL が含まれます。URL プレフィックスは、どのクロスドメイン リクエストが許可されるかを Chrome が認識するために必要です。

イベントページを作成する

すべての Chrome アプリは、アプリを起動してシステム イベントに応答するために、バックグラウンドのスクリプトまたはページを必要とします。

ドライブ アップローダは、background.js スクリプトで 500x600 ピクセルのウィンドウをメインページで開きます。また、コンテンツが大きくなりすぎないように、ウィンドウの最小の高さと幅も指定します。

chrome.app.runtime.onLaunched.addListener(function(launchData) {
  chrome.app.window.create('../main.html', {
    id: "GDriveExample",
    bounds: {
      width: 500,
      height: 600
    },
    minWidth: 500,
    minHeight: 600,
    frame: 'none'
  });
});

ウィンドウはクロムレス ウィンドウ(フレーム: 「なし」)として作成されます。デフォルトでは、ウィンドウは OS のデフォルトの閉じる/展開/最小化バーを伴ってレンダリングされます。

フレームのない Google ドライブ アップローダー

アップローダは frame: 'none' を使用してウィンドウを「空白のスレート」としてレンダリングし、main.html にカスタムの閉じるボタンを作成します。

カスタム フレームを使用した Google ドライブ アップローダー

ナビゲーション領域全体が