Web 共享 API: 对特定文件类型的权限被拒绝

Web Share API: Permission Denied on certain file type

我想通过 Web 共享将 JSON 对象作为文件共享 API。

但是,当将 type 指定为 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>

这是按预期工作的。您可以在本文档中查看list of supported file types

据此MDN documentation about shareable file types,支持的文件类型很少。

  • 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(text/plain)在其中。

根据您的情况,您可能需要考虑通过 URL parameter.

向相关文件共享 URL