説明
chrome.fileBrowserHandler API を使用すると、Chrome OS ファイル ブラウザを拡張できます。たとえば、ウェブサイトにユーザーがファイルをアップロードできるようにする場合にこの API を使用できます。
コンセプトと使用方法
ChromeOS のファイル ブラウザは、ユーザーが Alt+Shift+M キーを押すか、SD カード、USB キー、外付けドライブ、デジタル カメラなどの外部ストレージ デバイスを接続すると表示されます。ファイル ブラウザでは、外部デバイス上のファイルを表示するだけでなく、ユーザーが以前にシステムに保存したファイルも表示できます。
ユーザーが 1 つ以上のファイルを選択すると、ファイル ブラウザは、それらのファイルの有効なハンドラを表すボタンを追加します。たとえば、次のスクリーンショットでは、接尾辞「.png」の付いたファイルを選択すると、ユーザーがクリックできる [ギャラリーに保存] ボタンが表示されます。
権限
fileBrowserHandler拡張機能のマニフェストで "fileBrowserHandler" 権限を宣言する必要があります。
対象
"file_browser_handlers" フィールドを使用して、少なくとも 1 つのファイルタイプのハンドラとして拡張機能を登録する必要があります。ボタンに表示する 16×16 のアイコンも提供する必要があります。次に例を示します。
{
"name": "My extension",
...
"file_browser_handlers": [
{
"id": "upload",
"default_title": "Save to Gallery", // What the button will display
"file_filters": [
"filesystem:*.jpg", // To match all files, use "filesystem:*.*"
"filesystem:*.jpeg",
"filesystem:*.png"
]
}
],
"permissions" : [
"fileBrowserHandler"
],
"icons": {
"16": "icon16.png",
"48": "icon48.png",
"128": "icon128.png"
},
...
}
ファイル ブラウザ ハンドラを実装する
この API を使用するには、browser.fileBrowserHandler の onExecute イベントを処理する関数を実装する必要があります。ユーザーがファイル ブラウザ ハンドラを表すボタンをクリックするたびに、関数が呼び出されます。関数で File System API を使用して、ファイルの内容にアクセスします。以下に例を示します。
browser.fileBrowserHandler.onExecute.addListener(async (id, details) => {
if (id !== 'upload') {
return; // check if you have multiple file_browser_handlers
}
for (const entry of detail.entries) {
// the FileSystemFileEntry doesn't have a Promise API, wrap in one
const file = await new Promise((resolve, reject) => {
entry.file(resolve, reject);
});
const buffer = await file.arrayBuffer();
// do something with buffer
}
});
イベント ハンドラには次の 2 つの引数が渡されます。
id- マニフェスト ファイルの
id値。拡張機能が複数のハンドラを実装している場合は、ID 値をチェックして、どのハンドラがトリガーされたかを確認できます。 details- イベントを説明するオブジェクト。ユーザーが選択したファイルは、このオブジェクトの
entriesフィールド(FileSystemFileEntryオブジェクトの配列)から取得できます。
型
FileHandlerExecuteEventDetails
fileBrowserHandler.onExecute イベントのイベント詳細ペイロード。
プロパティ
-
entries
any[]
このアクションの対象となるファイル(ChromeOS ファイル ブラウザで選択)を表す Entry インスタンスの配列。
-
tab_id
number 省略可
このイベントを発生させたタブの ID。タブ ID はブラウザ セッション内で一意です。
イベント
onExecute
chrome.fileBrowserHandler.onExecute.addListener(
callback: function,
)
ChromeOS ファイル ブラウザからファイル システム アクションが実行されたときに発生します。
パラメータ
-
callback
関数
callbackパラメータは次のようになります。(id: string, details: FileHandlerExecuteEventDetails) => void
-
id
文字列
-