本文へスキップ

開発者向け

任意のウェブサイトから、リンクまたはJavaScriptでDownload Manager Plusへダウンロードを送ります。

「Download Manager Plusに追加」ボタン

ボタンの見た目をしたリンクです。JavaScriptなしで動作し、補助スクリプトがあると、ブリッジが使えるときはそれを使います。

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-url付きのリンクがブリッジを使うよう、scriptタグにdata-dmplus-autoを追加します。ユーザーが書いたリンクを表示するページでは行わないでください。信頼済みのサイトでは、ブリッジは確認なしでダウンロードします。

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サイトからのリクエストが1分あたり10件を超えています。
too-many-pending確認待ちのリクエストが既にあります。
not-foundそのIDは存在しないか、ページが要求したものではありません。
internal内部エラーです。もう一度お試しください。

制限とプライバシー

受け付けるのはhttp(s)のアドレスだけで、独自のヘッダーやクッキーはありません。各サイトは1分あたり最大10件まで要求でき、自分が要求したダウンロードの状態だけを受け取ります。公開サイトは、ユーザーのローカルネットワーク上のファイルを要求できません。