開発者向け
任意のウェブサイトから、リンクまたはJavaScriptでDownload Manager Plusへダウンロードを送ります。
ユニバーサルリンク
ファイルのアドレスを付けて/addへリンクします。ユーザーに拡張機能があればダウンロードの確認を求め、なければインストールするか、ファイルを直接ダウンロードできます。
<a href="https://download.extension.lat/add?name=manual.pdf&url=https%3A%2F%2Fexample.com%2Ffiles%2Fmanual.pdf" rel="nofollow">
Download Manager Plusでダウンロード
</a>| 名前 | 説明 |
|---|---|
| url | ファイルのhttp(s)アドレスです。必須です。 |
| name | 提案するファイル名です。任意で、保存前に危険な文字が取り除かれます。 |
「Download Manager Plusに追加」ボタン
ボタンの見た目をしたリンクです。JavaScriptなしで動作し、補助スクリプトがあると、ブリッジが使えるときはそれを使います。
<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.
<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-url付きのリンクがブリッジを使うよう、scriptタグにdata-dmplus-autoを追加します。ユーザーが書いたリンクを表示するページでは行わないでください。信頼済みのサイトでは、ブリッジは確認なしでダウンロードします。
// サイトでブリッジが使えるときはそれを使い、なければユニバーサルリンクを開きます。
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で応答します。 |
// 補助スクリプトなし。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 | サイトからのリクエストが1分あたり10件を超えています。 |
| too-many-pending | 確認待ちのリクエストが既にあります。 |
| not-found | そのIDは存在しないか、ページが要求したものではありません。 |
| internal | 内部エラーです。もう一度お試しください。 |
制限とプライバシー
受け付けるのはhttp(s)のアドレスだけで、独自のヘッダーやクッキーはありません。各サイトは1分あたり最大10件まで要求でき、自分が要求したダウンロードの状態だけを受け取ります。公開サイトは、ユーザーのローカルネットワーク上のファイルを要求できません。