NDEFReader: метод write()
Ограниченная доступность
Эта функция не относится к Baseline, так как она не работает во всех широко используемых браузерах.
Безопасный контекст: Эта функция доступна только в безопасных контекстах (HTTPS), в некоторых или во всех поддерживающих браузерах.
Экспериментальная функция: Это экспериментальная технология
Перед использованием в продакшене внимательно изучите таблицу совместимости с браузерами.
Метод write() интерфейса NDEFReader пытается записать сообщение NDEF в метку и возвращает Promise, который разрешается, когда сообщение записывается в метку, или отклоняется, если возникает ошибка аппаратного обеспечения или ошибка доступа. Этот метод вызывает запрос на разрешение, если разрешение "nfc" не было ранее предоставлено.
Синтаксис
write(message) write(message, options)
Параметры
message-
Сообщение для записи, либо строка, либо
ArrayBuffer, либоTypedArray, либоDataView, либо массив записей. Запись имеет следующие члены:dataНеобязательно-
Содержит данные для передачи, строка,
ArrayBuffer,TypedArray,DataViewили массив вложенных записей encodingНеобязательно-
Строка, определяющая кодировку записи.
idНеобязательно-
Идентификатор записи, определённый разработчиком.
langНеобязательно-
Допустимый тег языка в соответствии с RFC 5646: Теги для идентификации языков (также известный как BCP 47).
mediaTypeНеобязательно-
Допустимый MIME-тип.
recordType-
Строка, указывающая тип данных, хранящихся в
data. Должно быть одно из следующих значений:"absolute-url"-
Абсолютный URL-адрес данных.
"empty"-
Пустая
NDEFRecord. "mime"-
Допустимый MIME-тип.
"smart-poster"-
Интеллектуальный постер, как определено в спецификации NDEF-SMARTPOSTER.
"text"-
Текст, как определено в спецификации NDEF-TEXT.
"unknown"-
Тип записи неизвестен.
"URL"-
URL-адрес, как определено в спецификации NDEF-URI.
optionsНеобязательно-
Объект со следующими свойствами:
overwrite-
Булево значение, указывающее, следует ли перезаписывать существующие записи, если таковые имеются.
signalНеобязательно-
AbortSignal, позволяющий отменить текущую операцию записи.
Возвращаемое значение
A Promise, который разрешается, когда сообщение записано в метку, или отклоняется, если возникла ошибка аппаратного обеспечения или ошибка доступа.
Исключения
Этот метод не вызывает исключений; вместо этого он отклоняет возвращаемое обещание, передавая DOMException, чей name является одним из следующих:
AbortError-
Операция сканирования была прервана с помощью
AbortSignal, переданного в аргументеoptions. NotAllowedError-
Разрешение на данную операцию было отклонено, или
overwriteравноfalseи на метке уже есть записи. NotSupportedError-
Нет совместимого с Web NFC адаптера NFC, или доступный адаптер NFC не поддерживает отправку сообщений, или соединение не может быть установлено.
NotReadableError-
Пользовательскому агенту запрещено обращаться к основному адаптеру 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("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 |
Совместимость с браузерами
| Рабочий стол | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
write |
Нет | Нет | Нет | Нет | Нет | 89 | Нет | 63 | Нет | 15.0 | 89 |
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/NDEFReader/write