Para desarrolladores
Envía descargas a Download Manager Plus desde cualquier sitio web, con un enlace o con JavaScript.
Enlace universal
Enlaza a /add con la dirección del archivo. Si la persona tiene la extensión, la descarga se le propone para confirmar; si no, puede instalarla o descargar el archivo directamente.
<a href="https://download.extension.lat/add?name=manual.pdf&url=https%3A%2F%2Fejemplo.com%2Farchivos%2Fmanual.pdf" rel="nofollow">
Descargar con Download Manager Plus
</a>| Nombre | Descripción |
|---|---|
| url | Dirección http(s) del archivo. Obligatoria. |
| name | Nombre sugerido para el archivo. Opcional; se limpia antes de guardar. |
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.
Vista previa
Añadir a Download Manager Plus<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.
<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.
// 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.
| Nombre | Descripción |
|---|---|
| dmplus:add | Pide una descarga: url, fileName y folder opcionales. |
| dmplus:status | Consulta el estado de una descarga que pidió tu propia página. |
| dmplus:result | Respuesta de la extensión, con el mismo id que enviaste. |
| dmplus:ready | La extensión avisa de que el puente está activo en la página. |
| dmplus:ping | Pregunta si el puente está activo; la extensión responde con dmplus:ready. |
// 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
| Nombre | Descripción |
|---|---|
| pending | Esperando a que la persona confirme la descarga. |
| rejected | La persona la rechazó o cerró la ventana. |
| downloading | Descargando. |
| complete | Descarga terminada. |
| failed | La descarga no pudo completarse. |
Códigos de error
| Nombre | Descripción |
|---|---|
| invalid-request | Mensaje mal formado, dirección no http(s) o dirección de la red local. |
| unsupported-version | Tu página usa una versión del protocolo más nueva que la extensión. |
| rate-limited | Más de 10 solicitudes por minuto desde tu sitio. |
| too-many-pending | Ya hay solicitudes esperando confirmación. |
| not-found | Ese identificador no existe o no lo pidió tu página. |
| internal | Error 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.