Para desenvolvedores
Envie downloads para o Download Manager Plus a partir de qualquer site, com um link ou com JavaScript.
Link universal
Aponte para /add com o endereço do arquivo. Se a pessoa tiver a extensão, ela confirma o download; se não tiver, pode instalá-la ou baixar o arquivo diretamente.
<a href="https://download.extension.lat/add?name=manual.pdf&url=https%3A%2F%2Fexample.com%2Ffiles%2Fmanual.pdf" rel="nofollow">
Baixar com o Download Manager Plus
</a>| Nome | Descrição |
|---|---|
| url | O endereço http(s) do arquivo. Obrigatório. |
| name | Nome de arquivo sugerido. Opcional; é sanitizado antes de salvar. |
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.
<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.
<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.
// 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.
| Nome | Descrição |
|---|---|
| dmplus:add | Pede um download: url, mais fileName e folder opcionais. |
| dmplus:status | Consulta o status de um download que a sua própria página pediu. |
| dmplus:result | A resposta da extensão, com o mesmo id que você enviou. |
| dmplus:ready | A extensão avisa que a ponte está ativa na página. |
| dmplus:ping | Pergunta se a ponte está ativa; a extensão responde com dmplus:ready. |
// 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
| Nome | Descrição |
|---|---|
| pending | Aguardando a pessoa confirmar o download. |
| rejected | A pessoa recusou ou fechou a janela. |
| downloading | Baixando. |
| complete | Download concluído. |
| failed | Não foi possível concluir o download. |
Códigos de erro
| Nome | Descrição |
|---|---|
| invalid-request | Mensagem malformada, um endereço que não é http(s) ou um endereço de rede local. |
| unsupported-version | Sua página usa uma versão de protocolo mais nova que a da extensão. |
| rate-limited | Mais de 10 pedidos por minuto a partir do seu site. |
| too-many-pending | Já há pedidos aguardando confirmação. |
| not-found | Esse ID não existe ou não foi pedido pela sua página. |
| internal | Erro 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.