NDEFReader: scan() method
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.
The scan() method of the NDEFReader interface activates a reading device and returns a Promise that either resolves when an NFC tag read operation is scheduled or rejects if a hardware or permission error is encountered. This method triggers a permission prompt if the "nfc" permission has not been previously granted.
Syntax
js
scan(options)
Parameters
optionsOptional- 
    
An object with the following properties:
signal- 
        
An
AbortSignalthat allows cancelling thisscan()operation. 
 
Return value
  A Promise that resolves immediately after
  scheduling read operations for the NFC adapter.
Exceptions
  This method doesn't throw exceptions; instead, it rejects the returned promise,
  passing a DOMException whose name is one of the
  following:
AbortErrorDOMException- 
    
Returned if the scan operation was aborted with the
AbortSignalpassed in theoptionsargument. InvalidStateErrorDOMException- 
    
Returned if there's already an ongoing scan.
 NotAllowedErrorDOMException- 
    
Returned if the permission for this operation was rejected.
 NotSupportedErrorDOMException- 
    
Returned if there is no NFC adapter compatible with Web NFC or a connection cannot be established.
 
Examples
Handle scanning errors
This example shows what happens when a scan promise rejects and readingerror is thrown.
js
const ndef = new NDEFReader();
ndef
  .scan()
  .then(() => {
    console.log("Scan started successfully.");
    ndef.onreadingerror = (event) => {
      console.log(
        "Error! Cannot read data from the NFC tag. Try a different one?"
      );
    };
    ndef.onreading = (event) => {
      console.log("NDEF message read.");
    };
  })
  .catch((error) => {
    console.log(`Error! Scan failed to start: ${error}.`);
  });
Specifications
| Specification | 
|---|
| Web NFC API  # dom-ndefreader-scan  | 
Browser compatibility
BCD tables only load in the browser