Web Share API: отказано в разрешении на определенный тип файла

#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 об общих типах файлов, поддерживаемых типов файлов всего несколько.

  • PDF
  • некоторые аудиофайлы
  • некоторые файлы изображений
  • некоторые текстовые файлы
  • некоторые видеофайлы

В частности, текстовые файлы:

 .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 стороны, но не беспокойтесь, вы ответили на вопрос, вы получаете кредит. Просто проголосовал за ваш ответ!