Существует новый подход JSWASM, который позволяет сохранять в SQLite (быстрый способ OPFS) в браузере через javascript Worker. Образец здесь , который (вроде) для расширения Chrome. В идеале можно было бы сохранить из background.js, но неясно, можно ли оттуда вызывать воркер в MV3 на основе this и this. Есть ли у кого-нибудь простой рабочий пример, более близкий к моему варианту использования, который сохраняет содержимое с активной вкладки пользователя в базу данных SQLite? Спасибо.
OPFS зависит от метода createSyncAccessHandle(), который предоставляется в Worker потоках. Обычное обнаружение признаков выглядит следующим образом:
if (self instanceof WorkerGlobalScope && 'createSyncAccessHandle' in self.FileSystemFileHandle.prototype) {
// OPFS in `Worker` is supported!
}
Теперь работник службы расширений (как в настоящее время реализовано в Chrome) является экземпляром ServiceWorkerGlobalScope, поэтому API там не поддерживается.
К сожалению, на данный момент единственный выход — открыть страницу расширения и запустить оттуда код OPFS.
Да, на данный момент это сводится к этому. Было бы интересно выяснить, можно ли сделать API доступным и из ServiceWorkerGlobalScope. Возможно, стоит перенести это на WebExtensions CG.
Спасибо. Я создал задачу на сайте, на который вы ссылались: github.com/w3c/webextensions/issues/352
Спасибо... Боже, так из (а) контента js, (б) фона js, (в) всплывающего окна js, (г) отдельно запущенной страницы, только (г) позволяет получить доступ к SQLite через OPFS? (Я предполагаю, что нет никакого трюка с «c», чтобы получить сообщение «пожалуйста, сохраните»). Это действительно сокращает варианты использования. Думаю, мне нужно кешировать в обычное хранилище и периодически подталкивать пользователя открывать страницу для сохранения... :-(