Spec-Zone.ru › Web APIs

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API