Перейти до вмісту

Розробникам

Надсилайте завантаження в Download Manager Plus з будь-якого сайту, посиланням або через JavaScript.

Кнопка «Додати в Download Manager Plus»

Посилання, оформлене як кнопка. Працює без JavaScript; із допоміжним скриптом використовує міст, коли він доступний.

Попередній перегляд

Додати в Download Manager Plus
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"
>
  Додати в 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>

Допоміжний скрипт

Невеликий скрипт без залежностей, який відкриває window.DownloadManagerPlus. Типи TypeScript містяться в dmplus.d.ts.

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

<!-- Необов’язково: посилання з data-dmplus-url використовують міст. -->
<script src="https://download.extension.lat/sdk/dmplus.js" data-dmplus-auto defer></script>

Додайте data-dmplus-auto до тегу script, щоб посилання з data-dmplus-url використовували міст. Не робіть цього на сторінках, де показано посилання, написані вашими користувачами: на довіреному сайті міст завантажує без запитання.

JavaScript
// Використовує міст, якщо він доступний на вашому сайті; інакше відкриває універсальне посилання.
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

Якщо користувач дозволяє сайтам надсилати йому завантаження (вітання пропонує це для всіх сайтів) або дозволяє ваш сайт зі значка розширення, сторінка може запитувати завантаження і перевіряти їхній статус через window.postMessage. Користувач і далі підтверджує кожне завантаження, якщо не позначить ваш сайт (https) як довірений.

Повідомлення
Ім’яОпис
dmplus:addЗапитує завантаження: url, а також необов’язкові fileName і folder.
dmplus:statusПеревіряє статус завантаження, яке запитала ваша сторінка.
dmplus:resultВідповідь розширення з тим самим id, який ви надіслали.
dmplus:readyРозширення повідомляє, що міст на сторінці активний.
dmplus:pingПитає, чи активний міст; розширення відповідає dmplus:ready.
JavaScript
// Без допоміжного скрипта: той самий протокол через 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
);

Довідник

Статуси

Статуси
Ім’яОпис
pendingОчікування, поки користувач підтвердить завантаження.
rejectedКористувач відхилив його або закрив вікно.
downloadingЗавантаження триває.
completeЗавантаження завершено.
failedЗавантаження не вдалося завершити.

Коди помилок

Коди помилок
Ім’яОпис
invalid-requestНеправильно сформоване повідомлення, адреса не http(s) або адреса локальної мережі.
unsupported-versionВаша сторінка використовує новішу версію протоколу, ніж розширення.
rate-limitedБільше 10 запитів на хвилину з вашого сайту.
too-many-pendingЗапити вже чекають на підтвердження.
not-foundТакого ID немає, або його запитала не ваша сторінка.
internalВнутрішня помилка; спробуйте ще раз.

Обмеження і конфіденційність

Приймаються лише адреси http(s), без власних заголовків і cookie. Кожен сайт може зробити до 10 запитів на хвилину і отримує лише статус завантажень, які запитав сам. Публічний сайт не може запитувати файли з локальної мережі користувача.