Zum Inhalt springen

Für Entwickler

Sende Downloads von jeder Website an Download Manager Plus, mit einem Link oder mit JavaScript.

Schaltfläche „Zu Download Manager Plus hinzufügen“

Ein Link, der wie eine Schaltfläche aussieht. Er funktioniert ohne JavaScript; mit dem Hilfsskript nutzt er die Brücke, wenn sie verfügbar ist.

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"
>
  Zu Download Manager Plus hinzufügen
</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>

Hilfsskript

Ein kleines Skript ohne Abhängigkeiten, das window.DownloadManagerPlus bereitstellt. Die TypeScript-Typen stehen in dmplus.d.ts.

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

<!-- Optional: Links mit data-dmplus-url nutzen die Brücke. -->
<script src="https://download.extension.lat/sdk/dmplus.js" data-dmplus-auto defer></script>

Füge data-dmplus-auto zum script-Tag hinzu, damit Links mit data-dmplus-url die Brücke nutzen. Tu das nicht auf Seiten, die Links anzeigen, die deine Nutzerinnen und Nutzer geschrieben haben: auf einer vertrauenswürdigen Website lädt die Brücke ohne Nachfrage herunter.

JavaScript
// Nutzt die Brücke, wenn sie auf deiner Website verfügbar ist; sonst öffnet er den universellen Link.
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"…
}

JavaScript-Brücke

Wenn die Person Websites erlaubt, Downloads zu senden (die Willkommensanleitung bietet das für jede Website an), oder deine Website über das Erweiterungssymbol freigibt, kann deine Seite Downloads anfordern und ihren Status mit window.postMessage prüfen. Die Person bestätigt weiterhin jeden Download, außer sie markiert deine Website (https) als vertrauenswürdig.

Nachrichten
NameBeschreibung
dmplus:addFordert einen Download an: url sowie optional fileName und folder.
dmplus:statusPrüft den Status eines Downloads, den deine eigene Seite angefordert hat.
dmplus:resultDie Antwort der Erweiterung, mit derselben id, die du gesendet hast.
dmplus:readyDie Erweiterung meldet, dass die Brücke auf der Seite aktiv ist.
dmplus:pingFragt, ob die Brücke aktiv ist; die Erweiterung antwortet mit dmplus:ready.
JavaScript
// Ohne das Hilfsskript: dasselbe Protokoll mit 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
);

Referenz

Status

Status
NameBeschreibung
pendingWartet darauf, dass die Person den Download bestätigt.
rejectedDie Person hat abgelehnt oder das Fenster geschlossen.
downloadingWird heruntergeladen.
completeDownload abgeschlossen.
failedDer Download konnte nicht abgeschlossen werden.

Fehlercodes

Fehlercodes
NameBeschreibung
invalid-requestFehlerhafte Nachricht, eine Adresse, die nicht http(s) ist, oder eine Adresse im lokalen Netz.
unsupported-versionDeine Seite nutzt eine neuere Protokollversion als die Erweiterung.
rate-limitedMehr als 10 Anfragen pro Minute von deiner Website.
too-many-pendingEs warten schon Anfragen auf Bestätigung.
not-foundDiese ID gibt es nicht oder wurde nicht von deiner Seite angefordert.
internalInterner Fehler; versuch es noch einmal.

Grenzen und Datenschutz

Es werden nur http(s)-Adressen angenommen, ohne eigene Header oder Cookies. Jede Website kann höchstens 10 Anfragen pro Minute stellen und erhält nur den Status der Downloads, die sie selbst angefordert hat. Eine öffentliche Website kann keine Dateien aus dem lokalen Netz der Person anfordern.