Поддержка API файлов и каталогов в Firefox
Оригинальный API файловой системы был создан, чтобы браузеры могли получить доступ к защищённой виртуальной файловой системе на устройстве пользователя. Работа по стандартизации спецификации была прекращена в 2012 году, но к тому моменту Google Chrome уже реализовал свою собственную реализацию API. Со временем ряд популярных сайтов и веб-приложений стали его использовать, часто без предоставления механизма обратного падения к стандартным API или даже проверки доступности API перед его использованием. Mozilla вместо этого выбрала реализацию других API, которые могут быть использованы для решения многих тех же проблем, таких как IndexedDB; см. блог-пост Почему в Firefox нет API файловой системы? для получения более подробной информации.
Это привело к тому, что ряд популярных веб-сайтов некорректно работали в браузерах, кроме Chrome. По этой причине была предпринята попытка создать спецификацию, предлагающую функции API Google, по которой можно было бы достичь консенсуса. Результатом стал API файлов и каталогов. Этот подмножество API, предоставленное Chrome, всё ещё не полностью определено; однако по причинам совместимости с веб-приложениями было решено реализовать подмножество API в Firefox; это было введено в Firefox 50.
В этой статье описывается, как реализация API файлов и каталогов в Firefox отличается от других реализаций и/или спецификации.
Отклонения Chrome от спецификации
Наиболее значимая проблема совместимости заключается в том, что Chrome по-прежнему использует устаревшие имена для многих интерфейсов в API, так как они реализовали связанную, но отличающуюся спецификацию:
| Название в спецификации | Название в Google Chrome |
|---|---|
FileSystemDirectoryEntry | DirectoryEntry |
FileSystemDirectoryEntrySync | DirectoryEntrySync |
FileSystemDirectoryReader | DirectoryReader |
FileSystemDirectoryReaderSync | DirectoryReaderSync |
FileSystemEntry | Entry |
FileSystemEntrySync | EntrySync |
FileSystemFileEntry | FileEntry |
FileSystemFileEntrySync | FileEntrySync |
Не забудьте учесть это в своём коде, предусмотрев оба имени. Надеемся, что Chrome скоро будет обновлён для использования новых имён!
Чтобы гарантировать, что ваш код будет работать как в Chrome, так и в других браузерах, вы можете включить код, похожий на следующий:
const FileSystemDirectoryEntry = window.FileSystemDirectoryEntry || window.DirectoryEntry; const FileSystemEntry = window.FileSystemEntry || window.Entry;
Ограничения в Firefox
Далее рассмотрим ограничения реализации API в Firefox. В общих чертах, эти ограничения можно сформулировать следующим образом:
-
Скрипты контента не могут создавать файловые системы или инициировать доступ к файловой системе. В настоящее время существует только два способа получения доступа к элементам файловой системы:
- Элемент
<input>, использующий свойствоHTMLInputElement.webkitEntriesдля доступа к массиву объектовFileSystemEntry, описывающих элементы файловой системы, которые затем можно читать. - Использование перетаскивания, вызывая метод
DataTransferItem.webkitGetAsEntry, который позволяет получитьFileSystemFileEntryилиFileSystemDirectoryEntryдля файлов, перетащенных в зону перетаскивания.
- Элемент
-
Firefox не поддерживает схему URL
"filesystem:".
См. также
- API файлов и каталогов
- Введение в API файлов и каталогов
- Спецификация API файлов и каталогов
- Исходная спецификация для API файлов: каталоги и система (часто называемая «API файловой системы»); только Google Chrome реализовал этот заброшенный API.
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/File_and_Directory_Entries_API/Firefox_support