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
我想通过 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,支持的文件类型很少。
- 一些音频文件
- 一些图像文件
- 一些文本文件
- 一些视频文件
具体的文本文件是:
.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