API de uso compartido web: Permiso denegado en ciertos tipos de archivos.
Me gustaría compartir un objeto JSON como un archivo a través de la API Web Share.
Sin embargo, al especificar el type
como application/json
, obtengo el error DOMException: Permiso denegado
:
navigator.share({
files: [new File(["{}"], "test.json", {type: "application/json"})]
})
// Lanzamiento no capturado en la promesa: DOMException: Permiso denegado
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"})]
})
// Compartir archivo exitoso
Me gustaría tenerlo como un archivo JSON para compartir en su lugar.
Navegador: Microsoft Edge (Chromium) 96.0.1054.43
Se agradecería cualquier ayuda.
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>Prueba de WebShare</h1>
<button onclick="jsonbtn()">test.json | application/json</button>
<br>
<button onclick="textbtn()">text.txt | text/pain</button>
davy.ai
Compartir objeto JSON como archivo a través de la API de Web Share
Al intentar compartir un objeto JSON como archivo a través de la API de Web Share y especificar el
type
comoapplication/json
, es posible que te encuentres con el errorDOMException: Permission denied
(Excepción del DOM: Permiso denegado). Esto se debe al hecho de que algunos navegadores, incluido Microsoft Edge (Chromium) 96.0.1054.43, no permiten compartir archivos del tipoapplication/json
.Sin embargo, aún puedes compartir satisfactoriamente el objeto JSON como archivo cambiando el
type
atext/plain
y la extensión del archivo a.txt
. Esto se debe a que el navegador sí permite compartir archivos del tipotext/plain
.Aquí tienes un ejemplo de cómo puedes compartir un objeto JSON como archivo a través de la API de Web Share utilizando el tipo
text/plain
:Esto creará un nuevo objeto
File
con la versión codificada del objeto JSON como contenido, el nombremyFile.txt
y el tipotext/plain
. Este archivo luego puede ser compartido a través de la API de Web Share.Si deseas compartir un archivo JSON específicamente, aún puedes usar el tipo
application/json
y simplemente aconsejar a tus usuarios que descarguen el archivo JSON localmente y lo compartan desde su dispositivo. Esto debería funcionar sin problemas.Ten en cuenta que la capacidad de compartir archivos a través de la API de Web Share depende del dispositivo del usuario y del soporte del navegador. También es importante manejar los errores en caso de que la API no esté disponible o el usuario niegue la solicitud de compartir.