Chuyển tới nội dung

Cho nhà phát triển

Gửi lượt tải tới Download Manager Plus từ trang web bất kỳ, bằng liên kết hoặc bằng JavaScript.

Nút “Thêm vào Download Manager Plus”

Một liên kết được trình bày như nút. Liên kết hoạt động không cần JavaScript; với tập lệnh trợ giúp, liên kết dùng cầu nối khi cầu nối có sẵn.

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"
>
  Thêm vào 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>

Tập lệnh trợ giúp

Một tập lệnh nhỏ, không phụ thuộc, phơi bày window.DownloadManagerPlus. Kiểu TypeScript nằm ở dmplus.d.ts.

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

<!-- Không bắt buộc: liên kết có data-dmplus-url dùng cầu nối. -->
<script src="https://download.extension.lat/sdk/dmplus.js" data-dmplus-auto defer></script>

Thêm data-dmplus-auto vào thẻ tập lệnh để liên kết có data-dmplus-url dùng cầu nối. Đừng làm vậy trên trang hiện liên kết do người dùng của bạn viết: trên trang đáng tin, cầu nối tải mà không hỏi.

JavaScript
// Dùng cầu nối nếu trang của bạn có sẵn; nếu không, mở liên kết chung.
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"…
}

Cầu nối JavaScript

Nếu người dùng cho phép trang web gửi lượt tải (hướng dẫn chào mừng đề nghị điều này cho mọi trang) hoặc cho phép trang của bạn từ biểu tượng tiện ích, trang bạn có thể yêu cầu lượt tải và kiểm tra trạng thái bằng window.postMessage. Người dùng vẫn xác nhận từng lượt tải, trừ khi họ đánh dấu trang của bạn (https) là đáng tin.

Thông báo
TênMô tả
dmplus:addYêu cầu một lượt tải: url, cùng fileName và folder không bắt buộc.
dmplus:statusKiểm tra trạng thái của lượt tải do chính trang bạn yêu cầu.
dmplus:resultCâu trả lời của tiện ích, với cùng id bạn đã gửi.
dmplus:readyTiện ích báo rằng cầu nối đang hoạt động trên trang.
dmplus:pingHỏi cầu nối có đang hoạt động không; tiện ích trả lời bằng dmplus:ready.
JavaScript
// Không có tập lệnh trợ giúp: cùng giao thức với 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
);

Tham chiếu

Trạng thái

Trạng thái
TênMô tả
pendingĐang chờ người dùng xác nhận lượt tải.
rejectedNgười dùng từ chối hoặc đóng cửa sổ.
downloadingĐang tải.
completeTải xong.
failedKhông hoàn tất được lượt tải.

Mã lỗi

Mã lỗi
TênMô tả
invalid-requestThông báo sai định dạng, địa chỉ không phải http(s) hoặc địa chỉ mạng cục bộ.
unsupported-versionTrang của bạn dùng phiên bản giao thức mới hơn tiện ích.
rate-limitedHơn 10 yêu cầu mỗi phút từ trang của bạn.
too-many-pendingĐã có yêu cầu đang chờ xác nhận.
not-foundID đó không tồn tại hoặc không do trang của bạn yêu cầu.
internalLỗi nội bộ; hãy thử lại.

Giới hạn và quyền riêng tư

Chỉ địa chỉ http(s) được chấp nhận, không có tiêu đề hoặc cookie tùy chỉnh. Mỗi trang có thể gửi tối đa 10 yêu cầu mỗi phút và chỉ nhận trạng thái của các lượt tải do trang đó yêu cầu. Trang công khai không thể yêu cầu tệp từ mạng cục bộ của người dùng.