#javascript #node.js #json #permissions #web-share
#javascript #node.js #json #разрешения #веб-ресурс
Вопрос:
Я хотел бы поделиться объектом JSON в виде файла через Web Share API.
Однако при указании type
as application/json
я получил сообщение об DOMException: Permission denied
ошибке:
navigator.share({
files: [new File(["{}"], "test.json", {type: "application/json"})]
})
// Uncaught (in promise) DOMException: Permission denied
Однако, если я изменю значение type
на text/plain
и расширение имени файла на .txt
, все будет работать так, как ожидалось:
navigator.share({
files: [new File(["{}"],"test.txt", {type: "text/plain"})]
})
// File share success
Я хотел бы, чтобы это было как файл JSON для совместного использования.
Браузер: Microsoft Edge (Chromium) 96.0.1054.43
Любая помощь будет оценена.
Пример фрагмента:
const textbtn = () => {
navigator.share({
files: [new File(["{}"],"test.txt", {type: "text/plain"})]
}).catch(e => alert(e.message))
}
const jsonbtn = () => {
navigator.share({
files: [new File(["{}"],"test.json", {type: "application/json"})]
}).catch(e => alert(e.message))
}
<h1>WebShare Test<h1>
<button onclick="jsonbtn()">test.json | application/json</button>
<br />
<button onclick="textbtn()">text.text | text/pain</button>
Ответ №1:
Согласно этой документации MDN об общих типах файлов, поддерживаемых типов файлов всего несколько.
- некоторые аудиофайлы
- некоторые файлы изображений
- некоторые текстовые файлы
- некоторые видеофайлы
В частности, текстовые файлы:
.css - text/css
.csv - text/csv
.ehtml - text/html
.htm - text/html
.html - text/html
.shtm - text/html
.shtml - text/html
.text - text/plain
.txt - text/plain
К сожалению, JSON (application / json) не входит в их число, но txt (текстовый / обычный) есть.
В зависимости от вашего сценария, вы можете рассмотреть возможность предоставления общего доступа к URL-адресу для рассматриваемого файла с помощью параметра URL.
Ответ №2:
Это работает так, как задумано. Вы можете увидеть список поддерживаемых типов файлов в этом документе.
Комментарии:
1. Спасибо за информацию! Это специфичная для Chromium вещь или стандарт? Также существуют ли какие-либо официальные документы (например, MDN, исходный код Chromium), на которые я могу ссылаться?
2. Документ называется «Веб-общий ресурс — разрешенные расширения файлов в Chromium», и это то, что он есть. Стандарт не делает никаких предположений относительно того, что может быть общим, а что нет, это делают поставщики браузеров. Я только что открыл PR , который добавляет эту информацию в MDN (предварительный просмотр ).
3. @DenverCoder9 Похоже, теперь это официальный список в MDN: developer.mozilla.org/en-US/docs/Web/API/Navigator /…
4. Это правильно. Это был мой пиар , который привел к этому…
:-)
5. Это очень мило с вашей
<3
стороны, но не беспокойтесь, вы ответили на вопрос, вы получаете кредит. Просто проголосовал за ваш ответ!