NDEFReader: phương thức write()
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Secure context: This feature is available only in secure contexts (HTTPS), in some or all supporting browsers.
Experimental: This is an experimental technology
Check the Browser compatibility table carefully before using this in production.
Phương thức write() của giao diện NDEFReader cố gắng ghi thông điệp NDEF vào thẻ và trả về một Promise giải quyết khi thông điệp đã được ghi vào thẻ hoặc bị từ chối nếu gặp lỗi phần cứng hoặc quyền. Phương thức này kích hoạt yêu cầu cấp quyền nếu quyền "nfc" chưa được cấp trước đó.
Cú pháp
write(message)
write(message, options)
Tham số
message-
Thông điệp cần ghi, có thể là chuỗi,
ArrayBuffer,TypedArray,DataView, hoặc mảng các bản ghi. Một bản ghi có các thành phần sau:dataOptional-
Chứa dữ liệu cần truyền, có thể là chuỗi,
ArrayBuffer,TypedArray,DataView, hoặc mảng các bản ghi lồng nhau encodingOptional-
Một chuỗi chỉ định mã hóa của bản ghi.
idOptional-
Một định danh do nhà phát triển xác định cho bản ghi.
langOptional-
Một BCP 47 language tag hợp lệ.
mediaTypeOptional-
Một MIME type hợp lệ.
recordType-
Một chuỗi chỉ định loại dữ liệu được lưu trong
data. Phải là một trong các giá trị sau:"absolute-url"-
Một URL tuyệt đối đến dữ liệu.
"empty"-
Một
NDEFRecordrỗng. "mime"-
Một MIME type hợp lệ.
"smart-poster"-
Smart poster được định nghĩa bởi thông số kỹ thuật NDEF-SMARTPOSTER.
"text"-
Văn bản được định nghĩa bởi thông số kỹ thuật NDEF-TEXT.
"unknown"-
Loại bản ghi không được biết.
"URL"-
URL được định nghĩa bởi thông số kỹ thuật NDEF-URI.
optionsOptional-
Một đối tượng với các thuộc tính sau:
overwrite-
Giá trị boolean chỉ định có hay không ghi đè các bản ghi hiện có nếu chúng tồn tại.
signalOptional-
Một
AbortSignalcho phép hủy thao tác ghi hiện tại.
Giá trị trả về
Một Promise giải quyết khi thông điệp đã được ghi vào thẻ hoặc bị từ chối nếu gặp lỗi phần cứng hoặc quyền.
Ngoại lệ
Phương thức này không ném ngoại lệ; thay vào đó, nó từ chối promise được trả về, truyền DOMException có name là một trong những giá trị sau:
AbortError-
Thao tác scan bị hủy với
AbortSignalđược truyền trong đối sốoptions. NotAllowedError-
Quyền cho thao tác này bị từ chối hoặc
overwritelàfalsevà đã có bản ghi trên thẻ. NotSupportedError-
Không có bộ điều hợp NFC tương thích với Web NFC, hoặc bộ điều hợp NFC có sẵn không hỗ trợ đẩy thông điệp, hoặc không thể thiết lập kết nối.
NotReadableError-
UA không được phép truy cập bộ điều hợp NFC bên dưới (ví dụ do tùy chọn người dùng).
NetworkError-
Việc truyền thất bại sau khi đã bắt đầu (ví dụ thẻ bị xóa khỏi reader).
Ví dụ
>Ghi một chuỗi văn bản
Ví dụ dưới đây cho thấy cách ghi chuỗi vào thẻ NFC và xử lý bất kỳ lỗi nào xảy ra.
const ndef = new NDEFReader();
ndef
.write("Hello World")
.then(() => {
console.log("Message written.");
})
.catch((error) => {
console.log(`Write failed :-( try again: ${error}.`);
});
Ghi URL
Ví dụ dưới đây cho thấy cách ghi đối tượng bản ghi (mô tả ở trên) vào thẻ NFC và xử lý bất kỳ lỗi nào xảy ra.
const ndef = new NDEFReader();
try {
await ndef.write({
records: [{ recordType: "url", data: "http://example.com/" }],
});
} catch {
console.log("Write failed :-( try again.");
}
Lên lịch ghi với timeout
Đôi khi hữu ích khi đặt giới hạn thời gian cho thao tác ghi. Ví dụ bạn yêu cầu người dùng chạm thẻ nhưng không tìm thấy thẻ nào trong một khoảng thời gian nhất định, thì bạn hết thời gian.
const ndef = new NDEFReader();
ndef.onreading = (event) => console.log("We read a tag!");
function write(data, { timeout } = {}) {
return new Promise((resolve, reject) => {
const controller = new AbortController();
controller.signal.onabort = () =>
reject(new Error("Time is up, bailing out!"));
setTimeout(() => controller.abort(), timeout);
ndef.addEventListener(
"reading",
(event) => {
ndef.write(data, { signal: controller.signal }).then(resolve, reject);
},
{ once: true },
);
});
}
await ndef.scan();
try {
// Let's wait for 5 seconds only.
await write("Hello World", { timeout: 5_000 });
} catch (err) {
console.error("Something went wrong", err);
} finally {
console.log("We wrote to a tag!");
}
Thông số kỹ thuật
| Specification |
|---|
| Web NFC> # dom-ndefreader-write> |