Saltar al contenido

Para desarrolladores

Envía descargas a Download Manager Plus desde cualquier sitio web, con un enlace o con JavaScript.

Botón «Añadir a Download Manager Plus»

Un enlace con aspecto de botón. Funciona sin JavaScript; con el script auxiliar, usa el puente cuando está disponible.

HTML
<a
  class="dmplus-button"
  href="https://download.extension.lat/add?name=manual.pdf&url=https%3A%2F%2Fejemplo.com%2Farchivos%2Fmanual.pdf"
  data-dmplus-url="https://ejemplo.com/archivos/manual.pdf"
  data-dmplus-name="manual.pdf"
  rel="nofollow"
>
  Añadir a Download Manager Plus
</a>

<style>
  .dmplus-button {
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
    padding: 0.625rem 1.25rem;
    border-radius: 999px;
    background: #a3e635;
    color: #1a2e05;
    font: 600 0.875rem/1 system-ui, sans-serif;
    text-decoration: none;
  }
  .dmplus-button:focus-visible {
    outline: 2px solid #1a2e05;
    outline-offset: 2px;
  }
</style>

Script auxiliar

Un script pequeño, sin dependencias, que expone window.DownloadManagerPlus. Los tipos de TypeScript están en dmplus.d.ts.

HTML
<script src="https://download.extension.lat/sdk/dmplus.js" defer></script>

<!-- Opcional: los enlaces con data-dmplus-url usan el puente. -->
<script src="https://download.extension.lat/sdk/dmplus.js" data-dmplus-auto defer></script>

Añade data-dmplus-auto a la etiqueta del script para que los enlaces con data-dmplus-url usen el puente. No lo hagas en páginas que muestran enlaces escritos por tus usuarios: en un sitio de confianza, el puente descarga sin preguntar.

JavaScript
// Usa el puente si está disponible en tu sitio; si no, abre el enlace universal.
const result = await window.DownloadManagerPlus.addDownload({
  url: "https://ejemplo.com/archivos/manual.pdf",
  name: "manual.pdf",
});

if ("requestId" in result) {
  const state = await window.DownloadManagerPlus.bridge.status(result.requestId);
  console.log(state.status); // "pending", "downloading", "complete"…
}

Puente JavaScript

Si la persona permite que las webs le envíen descargas (la guía de bienvenida lo propone para todos los sitios) o autoriza tu sitio desde el icono de la extensión, tu página puede pedir descargas y conocer su estado con window.postMessage. Cada descarga se confirma igualmente, salvo que la persona marque tu sitio (https) como de confianza.

Mensajes
NombreDescripción
dmplus:addPide una descarga: url, fileName y folder opcionales.
dmplus:statusConsulta el estado de una descarga que pidió tu propia página.
dmplus:resultRespuesta de la extensión, con el mismo id que enviaste.
dmplus:readyLa extensión avisa de que el puente está activo en la página.
dmplus:pingPregunta si el puente está activo; la extensión responde con dmplus:ready.
JavaScript
// Sin el script auxiliar: el mismo protocolo con postMessage.
window.addEventListener("message", (event) => {
  if (event.source !== window) return;
  if (event.data?.source === "dmplus-extension" && event.data.type === "dmplus:result") {
    console.log(event.data.id, event.data.result);
  }
});

window.postMessage(
  {
    id: crypto.randomUUID(),
    request: { url: "https://ejemplo.com/archivos/manual.pdf", fileName: "manual.pdf", v: 1 },
    source: "dmplus",
    type: "dmplus:add",
  },
  location.origin
);

Referencia

Estados

Estados
NombreDescripción
pendingEsperando a que la persona confirme la descarga.
rejectedLa persona la rechazó o cerró la ventana.
downloadingDescargando.
completeDescarga terminada.
failedLa descarga no pudo completarse.

Códigos de error

Códigos de error
NombreDescripción
invalid-requestMensaje mal formado, dirección no http(s) o dirección de la red local.
unsupported-versionTu página usa una versión del protocolo más nueva que la extensión.
rate-limitedMás de 10 solicitudes por minuto desde tu sitio.
too-many-pendingYa hay solicitudes esperando confirmación.
not-foundEse identificador no existe o no lo pidió tu página.
internalError interno; vuelve a intentarlo.

Límites y privacidad

Solo se aceptan direcciones http(s), sin cabeceras ni cookies propias. Cada sitio puede hacer hasta 10 solicitudes por minuto y solo recibe el estado de las descargas que pidió. Un sitio público no puede pedir archivos de la red local de la persona.