Расширение Google Chrome - как получить доступ и хранить локальные файлы для последующего использования - PullRequest
3 голосов
/ 23 августа 2011

Я сейчас пишу свое первое расширение для Google Chrome.Упрощенно, я хочу добавить файловый браузер во всплывающем окне расширений, просмотреть изображение в браузере и вставить это изображение в текущую открытую вкладку.

Дополнительно я хочу сохранить выбранный файл в расширении для последующего повторного использования.

Первый подход - загрузка содержимого файла с помощью FileAPI и сохранение содержимого файла base64, закодированного в localStorage.К сожалению, это перестало работать после нескольких изображений из-за ограниченного пространства localStorage.

Лучшим подходом было бы получить абсолютное имя файла выбранного файла и перечитывать файл каждый раз, когда это необходимо - к сожалению, я не смог получить полный файлвключая путь, только что получил имя файла без пути.

Другим подходом может быть WebSQL, но это кажется сложным - кто-нибудь может подтвердить, есть ли у нас квота там или нет?

Кто-нибудь сделал что-то подобное заранее?Я был бы рад получить любую помощь.

1 Ответ

1 голос
/ 24 ноября 2011

В зависимости от того, что вам нужно сделать с кэшированными файлами, вы можете просто использовать API-интерфейс FileIO для сохранения двоичного файла в среду изолированного окружения вашего расширения. Простое сохранение пути к исходному файлу, вероятно, не сработает, поскольку API может читать только в его изолированной программной среде [если вы сами не выбрали файлы с помощью ввода].

При необходимости вы можете добавить разрешение «unlimitedStorage» (подробнее в документации разработчика ) к вашему manifest.json , чтобы переопределить ограничения хранилища.

"permissions": [
  "unlimitedStorage"
],

Это будет применяться только к файловому вводу-выводу (временному / постоянному) и веб-SQL (только временному). Благодаря синхронной реализации, localStorage имеет максимум ~ 2700000 символов (как оно хранится как UTF-16), которое не будет увеличено при установке этого разрешения.

С помощью File API и Chrome 13+ вы можете запросить определенную квоту (см. здесь и здесь для полного примера). Это было введено для работы с веб-приложениями и работает без установки разрешения unlimitedStorage . (Однако, если разрешение установлено, пользователь в настоящее время не запрашивает разрешение на хранение)

webkitStorageInfo.requestQuota( 
    webkitStorageInfo.PERSISTENT
    newQuotaInBytes,
    quotaCallback,
    errorCallback);

В моих экспериментах это, кажется, единственный способ постоянно хранить большие объемы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...