Ir para o conteúdo

Para desenvolvedores

Envie downloads para o Download Manager Plus a partir de qualquer site, com um link ou com JavaScript.

Botão “Adicionar ao Download Manager Plus”

Um link com aparência de botão. Funciona sem JavaScript; com o script auxiliar, usa a ponte quando ela está disponível.

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"
>
  Adicionar ao 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

Um script pequeno, sem dependências, que expõe window.DownloadManagerPlus. Os tipos de TypeScript estão em dmplus.d.ts.

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

<!-- Opcional: links com data-dmplus-url usam a ponte. -->
<script src="https://download.extension.lat/sdk/dmplus.js" data-dmplus-auto defer></script>

Adicione data-dmplus-auto à tag do script para que links com data-dmplus-url usem a ponte. Não faça isso em páginas que mostram links escritos pelos seus usuários: em um site confiável, a ponte baixa sem perguntar.

JavaScript
// Usa a ponte se ela estiver disponível no seu site; senão, abre o link universal.
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"…
}

Ponte JavaScript

Se a pessoa permitir que os sites enviem downloads (o guia de boas-vindas oferece isso para todos os sites) ou autorizar o seu site pelo ícone da extensão, a página pode pedir downloads e consultar o status com window.postMessage. A pessoa ainda confirma cada download, a menos que marque o seu site (https) como confiável.

Mensagens
NomeDescrição
dmplus:addPede um download: url, mais fileName e folder opcionais.
dmplus:statusConsulta o status de um download que a sua própria página pediu.
dmplus:resultA resposta da extensão, com o mesmo id que você enviou.
dmplus:readyA extensão avisa que a ponte está ativa na página.
dmplus:pingPergunta se a ponte está ativa; a extensão responde com dmplus:ready.
JavaScript
// Sem o script auxiliar: o mesmo protocolo com 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
);

Referência

Status

Status
NomeDescrição
pendingAguardando a pessoa confirmar o download.
rejectedA pessoa recusou ou fechou a janela.
downloadingBaixando.
completeDownload concluído.
failedNão foi possível concluir o download.

Códigos de erro

Códigos de erro
NomeDescrição
invalid-requestMensagem malformada, um endereço que não é http(s) ou um endereço de rede local.
unsupported-versionSua página usa uma versão de protocolo mais nova que a da extensão.
rate-limitedMais de 10 pedidos por minuto a partir do seu site.
too-many-pendingJá há pedidos aguardando confirmação.
not-foundEsse ID não existe ou não foi pedido pela sua página.
internalErro interno; tente de novo.

Limites e privacidade

Só são aceitos endereços http(s), sem cabeçalhos personalizados nem cookies. Cada site pode fazer até 10 pedidos por minuto e só recebe o status dos downloads que ele mesmo pediu. Um site público não pode pedir arquivos da rede local da pessoa.