javascript - navigator.share(file) 不适用于音频文件
问题描述
我有这个工作功能:
export const shareFile = (message: File) => {
const nav = window.navigator as any ;
const data = { files: [message], text: '' };
if (nav.canShare && nav.canShare(data)) {
navigator.share(data)
.then(() => console.log('Share was successful.'))
.catch(error => console.log('Sharing failed', error));
} else {
console.log(`Your system doesn't support sharing files.`);
}
};
};
它适用于 txt 文件、视频和图像,但不适用于音频文件(例如 .mp3 文件)。当我记录文件时,这是它的属性:
file:
data: File
lastModified: 1619510595837
lastModifiedDate: Tue Apr 27 2021 11:03:15 GMT+0300 (Israel Daylight Time) {}
name: "feature-completion-1.mp3"
size: 4015
type: "audio/mpeg"
webkitRelativePath: ""
__proto__: File
在控制台中,错误是:
Sharing failed DOMException: Permission denied
有人可以帮我解决这个问题吗?为什么权限被拒绝?
注意:我的网站是通过 HTTPS 提供的。
解决方案
您的实现是正确的,但您遇到了安全限制。该规范在该方法的处理算法的步骤 9share()
中对此进行了解释:
如果出于安全考虑而阻止文件类型,则返回一个以"NotAllowedError"
DOMException
.
现在你当然可以争论为什么.mp3
文件会是一个安全问题(我不知道答案)。理想情况下,您在new.crbug.com中执行此操作。
推荐阅读
- javascript - How to display user's inputted text from textarea on the same page?
- flutter - Flutter DropdownMenu 不会更新当前选择
- javascript - How do I loop through child array and check if component exists React Testing Library
- blazor - Update components element from a different component
- docker - 容器之间的redis连接被拒绝
- javascript - firestore get data from two tables one after the other return empty array
- laravel - Laravel protected $loginView load the default login view
- python - Pandas `groupby.aggregate` on `df.index.duplicated()`
- r - R使用字符串重塑
- ansible - How to parallize the execution by hostgroup in ansible