NDEFReader: write() 方法
NDEFReader 介面的 write() 方法嘗試將 NDEF 訊息寫入標籤,並返回一個 Promise。該 Promise 在訊息成功寫入標籤後解析,或者在遇到硬體或許可權錯誤時拒絕。如果尚未授予“nfc”許可權,此方法會觸發一個許可權提示。
語法
write(message)
write(message, options)
引數
message-
要寫入的訊息,可以是字串、
ArrayBuffer、TypedArray、DataView,或記錄陣列。記錄包含以下成員:data可選-
包含要傳輸的資料,可以是字串、
ArrayBuffer、TypedArray、DataView,或巢狀記錄的陣列。 encoding可選-
指定記錄編碼的字串。
id可選-
為記錄定義的識別符號。
lang可選-
有效的 BCP 47 語言標籤。
mediaType可選-
有效的 MIME 型別。
recordType-
指示
data中儲存的資料型別的字串。它必須是以下值之一:"absolute-url"-
資料的絕對 URL。
"empty"-
NDEFRecord為空。 "mime"-
有效的 MIME 型別。
"smart-poster"-
根據 NDEF-SMARTPOSTER 規範定義的智慧海報。
"text"-
根據 NDEF-TEXT 規範定義的文字。
"unknown"(未知)-
記錄型別未知。
"URL"-
根據 NDEF-URI 規範定義的 URL。
options可選-
具有以下屬性的物件:
overwrite-
一個布林值,指定是否應覆蓋現有記錄(如果存在)。
signal可選-
一個
AbortSignal,允許取消當前的寫入操作。
返回值
一個 Promise,在訊息成功寫入標籤後解析,或者在遇到硬體或許可權錯誤時拒絕。
異常
此方法不丟擲異常;相反,它會拒絕返回的 Promise,並傳遞一個 name 為以下之一的 DOMException:
AbortError-
在
options引數中傳遞的AbortSignal中止了掃描操作。 NotAllowedError-
此操作的許可權被拒絕,或者
overwrite為false且標籤上已存在記錄。 NotSupportedError-
沒有與 Web NFC 相容的 NFC 介面卡,或者可用的 NFC 介面卡不支援訊息推送,或者無法建立連線。
NotReadableError-
UA 未被允許訪問底層 NFC 介面卡(例如,由於使用者偏好)。
NetworkError-
傳輸在開始後失敗(例如,標籤已從讀卡器移除)。
示例
寫入文字字串
以下示例展示瞭如何將字串寫入 NFC 標籤並處理髮生的任何錯誤。
const ndef = new NDEFReader();
ndef
.write("Hello World")
.then(() => {
console.log("Message written.");
})
.catch((error) => {
console.log(`Write failed :-( try again: ${error}.`);
});
寫入 URL
以下示例展示瞭如何將記錄物件(如上所述)寫入 NFC 標籤並處理髮生的任何錯誤。
const ndef = new NDEFReader();
try {
await ndef.write({
records: [{ recordType: "url", data: "http://example.com/" }],
});
} catch {
console.log("Write failed :-( try again.");
}
安排帶有超時的寫入
有時為寫入操作設定時間限制很有用。例如,您要求使用者觸控一個標籤,但在一定時間內未找到任何標籤,然後您將超時。
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!");
}
規範
| 規範 |
|---|
| Web NFC # dom-ndefreader-write |
瀏覽器相容性
載入中…