es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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>

Tags:  , , , ,

Answer

  1. Avatar for 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 como application/json, es posible que te encuentres con el error DOMException: 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 tipo application/json.

    Sin embargo, aún puedes compartir satisfactoriamente el objeto JSON como archivo cambiando el type a text/plain y la extensión del archivo a .txt. Esto se debe a que el navegador sí permite compartir archivos del tipo text/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:

    navigator.share({
      files: [new File([JSON.stringify(myJson)], 'myFile.txt', {type: 'text/plain'})]
    });
    

    Esto creará un nuevo objeto File con la versión codificada del objeto JSON como contenido, el nombre myFile.txt y el tipo text/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.

    navigator.share({
      files: [new File([JSON.stringify(myJson)], 'myFile.json', {type: 'application/json'})]
    }).catch(function(error) {
      console.error('Error al compartir archivo JSON:', error);
    });
    

    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.

Comments are closed.