Przejdź do treści

Dla deweloperów

Wysyłaj pobrania do Download Manager Plus z dowolnej witryny, linkiem albo przez JavaScript.

Przycisk „Dodaj do Download Manager Plus”

Link wystylizowany jako przycisk. Działa bez JavaScript; ze skryptem pomocniczym używa mostka, gdy ten jest dostępny.

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"
>
  Dodaj do 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>

Skrypt pomocniczy

Mały skrypt bez zależności, który udostępnia window.DownloadManagerPlus. Typy TypeScript są w dmplus.d.ts.

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

<!-- Opcjonalnie: linki z data-dmplus-url używają mostka. -->
<script src="https://download.extension.lat/sdk/dmplus.js" data-dmplus-auto defer></script>

Dodaj data-dmplus-auto do znacznika script, aby linki z data-dmplus-url używały mostka. Nie rób tego na stronach, które pokazują linki napisane przez użytkowników: na zaufanej witrynie mostek pobiera bez pytania.

JavaScript
// Używa mostka, jeśli jest dostępny na twojej witrynie; w przeciwnym razie otwiera uniwersalny 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"…
}

Mostek JavaScript

Jeśli użytkownik pozwala witrynom wysyłać pobrania (przewodnik powitalny proponuje to dla każdej witryny) albo zezwala twojej witrynie z ikony rozszerzenia, twoja strona może prosić o pobrania i sprawdzać ich stan przez window.postMessage. Użytkownik nadal potwierdza każde pobranie, chyba że oznaczy twoją witrynę (https) jako zaufaną.

Komunikaty
NazwaOpis
dmplus:addProsi o pobranie: url oraz opcjonalne fileName i folder.
dmplus:statusSprawdza stan pobrania, o które poprosiła twoja własna strona.
dmplus:resultOdpowiedź rozszerzenia, z tym samym id, które wysłano.
dmplus:readyRozszerzenie ogłasza, że mostek jest aktywny na stronie.
dmplus:pingPyta, czy mostek jest aktywny; rozszerzenie odpowiada dmplus:ready.
JavaScript
// Bez skryptu pomocniczego: ten sam protokół z 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
);

Dokumentacja

Stany

Stany
NazwaOpis
pendingCzeka, aż użytkownik potwierdzi pobranie.
rejectedUżytkownik odmówił albo zamknął okno.
downloadingPobieranie.
completePobieranie ukończone.
failedNie udało się ukończyć pobierania.

Kody błędów

Kody błędów
NazwaOpis
invalid-requestZniekształcony komunikat, adres inny niż http(s) albo adres sieci lokalnej.
unsupported-versionTwoja strona używa nowszej wersji protokołu niż rozszerzenie.
rate-limitedWięcej niż 10 żądań na minutę z twojej witryny.
too-many-pendingŻądania już czekają na potwierdzenie.
not-foundTen identyfikator nie istnieje albo nie został zamówiony przez twoją stronę.
internalBłąd wewnętrzny; spróbuj ponownie.

Limity i prywatność

Przyjmowane są tylko adresy http(s), bez własnych nagłówków i plików cookie. Każda witryna może wysłać do 10 żądań na minutę i dostaje tylko stan pobrań, o które sama poprosiła. Publiczna witryna nie może prosić o pliki z sieci lokalnej użytkownika.