Me gustaría compartir un objeto JSON como un archivo a través de Web Share API.
Sin embargo, al especificar el type como application/json , obtuve la DOMException: Permission denied Error:
navigator.share({ files: [new File(["{}"], "test.json", {type: "application/json"})] }) // Uncaught (in promise) DOMException: Permission denied Sin embargo, si cambio el type a text/plain y la extensión del nombre de archivo a .txt , funciona como se esperaba:
navigator.share({ files: [new File(["{}"],"test.txt", {type: "text/plain"})] }) // File share successMe gustaría tenerlo como un archivo `JSON para compartirlo en su lugar.
Navegador: Microsoft Edge (Chromium) 96.0.1054.43
Cualquier ayuda sería apreciada.
Ejemplo de fragmento:
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>Según esta documentación de MDN sobre tipos de archivos que se pueden compartir , los tipos de archivos admitidos son solo unos pocos.
Los archivos de texto en particular son:
.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/plainDesafortunadamente, JSON (aplicación/json) no está entre ellos, pero txt (texto/sin formato) sí lo está.
Según su escenario, es posible que desee considerar compartir una URL con el archivo en cuestión, a través del parámetro de URL .
Esto está funcionando según lo previsto. Puede ver la lista de tipos de archivos admitidos en este documento.