-
Notifications
You must be signed in to change notification settings - Fork 37
/
sdm_webnfc.html
76 lines (61 loc) · 2.34 KB
/
sdm_webnfc.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
{% extends "_layout.html" %}
{% block content %}
{% if demo_mode %}
<h1>Secure Dynamic Messaging Backend Server Example</h1>
<h2>WebNFC Example</h2>
<p>Chrome for Android supports NDEF scanning directly through JavaScript (since release 89). You can try it out here:</p>
<button id="scanBtn" style="font-size: 24px; font-weight: bold;" class="btn btn-primary">Start scan</button>
<p class="mt-3">This feature requires using Chrome for Android. It also needs HTTPS in order to work properly. This demo will simply read the first NDEF record and interpret it as URL.</p>
<h2>Scan result</h2>
<p id="scanAttempt">Scan attempt: 0</p>
<div class="card">
<div class="card-body">
<code id="scanResult">(Scan result will appear here)</code>
</div>
</div>
<script>
var attempt = 0;
log = alert;
var scanBtn = document.getElementById('scanBtn');
if (!("NDEFReader" in window)) {
scanBtn.innerText = "Unable to access WebNFC";
scanBtn.setAttribute('disabled', 'disabled');
}
scanBtn.addEventListener("click", async () => {
try {
const ndef = new NDEFReader();
await ndef.scan();
scanBtn.innerText = "Please tap the tag...";
scanBtn.setAttribute('disabled', 'disabled');
ndef.addEventListener("readingerror", () => {
++attempt;
document.getElementById("scanAttempt").innerText = 'Scan attempt: ' + attempt;
document.getElementById("scanResult").innerHTML = '(Failed to read NDEF data from the tag. Please try again or try different tag.)';
});
ndef.addEventListener("reading", async ({ message, serialNumber }) => {
++attempt;
document.getElementById("scanAttempt").innerText = 'Scan attempt: ' + attempt;
let ndef_url;
try {
ndef_url = new TextDecoder("utf-8").decode(message.records[0].data);
} catch (e) {
document.getElementById("scanResult").innerHTML = '(Error when parsing NDEF data: ' + e + '. Please try again or try different tag.)';
return;
}
let ah = document.createElement("a");
ah.href = ndef_url;
ah.innerText = ndef_url;
document.getElementById("scanResult").innerHTML = '';
document.getElementById("scanResult").appendChild(ah);
});
} catch (error) {
log("Argh! " + error);
}
});
</script>
<hr>
<a href="/">Back to the main page</a>
{% else %}
<p>This feature is disabled.</p>
{% endif %}
{% endblock %}