Aller au contenu

Pour les développeurs

Envoyez des téléchargements à Download Manager Plus depuis n’importe quel site, avec un lien ou avec JavaScript.

Bouton « Ajouter à Download Manager Plus »

Un lien présenté comme un bouton. Il fonctionne sans JavaScript ; avec le script d’aide, il utilise le pont quand il est disponible.

HTML
<a
  class="dmplus-button"
  href="https://download.extension.lat/add?name=manual.pdf&url=https%3A%2F%2Fexample.com%2Ffiles%2Fmanual.pdf"
  data-dmplus-url="https://example.com/files/manual.pdf"
  data-dmplus-name="manual.pdf"
  rel="nofollow"
>
  Ajouter à 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 d’aide

Un petit script sans dépendance qui expose window.DownloadManagerPlus. Les types TypeScript se trouvent dans dmplus.d.ts.

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

<!-- Facultatif : les liens avec data-dmplus-url utilisent le pont. -->
<script src="https://download.extension.lat/sdk/dmplus.js" data-dmplus-auto defer></script>

Ajoutez data-dmplus-auto à la balise du script pour que les liens avec data-dmplus-url utilisent le pont. Ne le faites pas sur des pages qui affichent des liens écrits par vos utilisateurs : sur un site de confiance, le pont télécharge sans demander.

JavaScript
// Utilise le pont s’il est disponible sur votre site ; sinon, ouvre le lien universel.
const result = await window.DownloadManagerPlus.addDownload({
  url: "https://example.com/files/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"…
}

Pont JavaScript

Si la personne autorise les sites à lui envoyer des téléchargements (le guide de bienvenue le propose pour tous les sites) ou autorise votre site depuis l’icône de l’extension, votre page peut demander des téléchargements et consulter leur statut avec window.postMessage. La personne confirme encore chaque téléchargement, sauf si elle marque votre site (https) comme site de confiance.

Messages
NomDescription
dmplus:addDemande un téléchargement : url, plus fileName et folder facultatifs.
dmplus:statusVérifie le statut d’un téléchargement demandé par votre propre page.
dmplus:resultLa réponse de l’extension, avec le même id que vous avez envoyé.
dmplus:readyL’extension annonce que le pont est actif sur la page.
dmplus:pingDemande si le pont est actif ; l’extension répond avec dmplus:ready.
JavaScript
// Sans le script d’aide : le même protocole avec 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://example.com/files/manual.pdf", fileName: "manual.pdf", v: 1 },
    source: "dmplus",
    type: "dmplus:add",
  },
  location.origin
);

Référence

Statuts

Statuts
NomDescription
pendingEn attente de la confirmation de la personne.
rejectedLa personne a refusé ou a fermé la fenêtre.
downloadingTéléchargement en cours.
completeTéléchargement terminé.
failedLe téléchargement n’a pas pu aboutir.

Codes d’erreur

Codes d’erreur
NomDescription
invalid-requestMessage malformé, une adresse qui n’est pas en http(s) ou une adresse de réseau local.
unsupported-versionVotre page utilise une version du protocole plus récente que l’extension.
rate-limitedPlus de 10 demandes par minute depuis votre site.
too-many-pendingDes demandes attendent déjà une confirmation.
not-foundCet identifiant n’existe pas ou n’a pas été demandé par votre page.
internalErreur interne ; réessayez.

Limites et confidentialité

Seules les adresses http(s) sont acceptées, sans en-têtes personnalisés ni cookies. Chaque site peut faire jusqu’à 10 demandes par minute et ne reçoit que le statut des téléchargements qu’il a demandés. Un site public ne peut pas demander des fichiers du réseau local de la personne.