Описание
Используйте API chrome.fileBrowserHandler, чтобы расширить возможности файлового менеджера ChromeOS. Например, с помощью этого API можно разрешить пользователям загружать файлы на ваш сайт.
Основные понятия и использование
Файловый менеджер ChromeOS открывается, когда пользователь нажимает Alt + Shift + M или подключает внешнее устройство хранения данных, например SD-карту, USB-ключ, внешний диск или цифровую камеру. В файловом браузере можно просматривать не только файлы на внешних устройствах, но и файлы, сохраненные пользователем в системе.
Когда пользователь выбирает один или несколько файлов, в файловом браузере появляются кнопки, соответствующие допустимым обработчикам для этих файлов. Например, на скриншоте ниже показано, что при выборе файла с расширением PNG появляется кнопка "Сохранить в галерее".
Разрешения
fileBrowserHandlerВ манифесте расширения необходимо объявить разрешение "fileBrowserHandler".
Доступность
Чтобы зарегистрировать расширение в качестве обработчика хотя бы одного типа файлов, необходимо использовать поле "file_browser_handlers". Также необходимо предоставить значок размером 16 x 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, необходимо реализовать функцию, которая обрабатывает событие onExecute в browser.fileBrowserHandler. Функция будет вызываться каждый раз, когда пользователь нажимает кнопку, представляющую обработчик файлового браузера. В функции используйте 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
}
});
Обработчику событий передаются два аргумента:
id- Значение
idиз файла манифеста. Если в расширении реализовано несколько обработчиков, вы можете проверить значение идентификатора, чтобы узнать, какой обработчик был запущен. details- Объект, описывающий событие. Вы можете получить файл или файлы, выбранные пользователем, из поля
entriesэтого объекта, которое представляет собой массив объектовFileSystemFileEntry.
Типы
FileHandlerExecuteEventDetails
Полезная нагрузка сведений о событии для события fileBrowserHandler.onExecute.
Свойства
-
записи
any[]
Массив экземпляров Entry, представляющих файлы, которые являются целями этого действия (выбраны в файловом браузере ChromeOS).
-
tab_id
number (необязательно)
Идентификатор вкладки, которая вызвала это событие. Идентификаторы вкладок уникальны в пределах сеанса браузера.
События
onExecute
browser.fileBrowserHandler.onExecute.addListener(
callback: function,
)
Срабатывает, когда в файловом браузере ChromeOS выполняется действие с файловой системой.
Параметры
-
обратный вызов
function
Параметр
callbackвыглядит следующим образом:(id: string, details: FileHandlerExecuteEventDetails) => void
-
id
string
-
подробные сведения
-