tbdavid2019 commited on
Commit
554faba
·
verified ·
1 Parent(s): add9e48
Files changed (1) hide show
  1. script.js +30 -19
script.js CHANGED
@@ -5,24 +5,36 @@ const log = document.getElementById('log');
5
  // 功能開關:是否呼叫 API 獲取額外資訊
6
  const useApi = false;
7
 
8
- resetButton.addEventListener('click', () => {
9
- log.textContent = '';
10
- });
 
 
 
 
 
11
 
12
- scanButton.addEventListener('click', async () => {
13
- log.textContent = '請將 NFC 卡片靠近您的裝置...';
 
 
 
 
14
 
15
- try {
16
- if ('NDEFReader' in window) {
17
- const reader = new NDEFReader();
18
- await reader.scan();
 
 
19
  log.textContent = '掃描器已啟動,等待卡片...';
20
 
21
- reader.addEventListener('readingerror', () => {
22
  log.textContent = '讀取 NFC 卡片時發生錯誤。';
23
- });
 
24
 
25
- reader.addEventListener('reading', ({ message, serialNumber }) => {
26
  let output = `> 卡片 UID: ${serialNumber}\n`;
27
 
28
  if (useApi) {
@@ -43,11 +55,10 @@ scanButton.addEventListener('click', async () => {
43
  // 當 useApi 為 false 時,只顯示 UID
44
  log.textContent += output; // 改為附加資訊
45
  }
46
- });
47
- } else {
48
- log.textContent = '您的瀏覽器不支援 Web NFC。請在 Android 版 Chrome 中嘗試。';
 
49
  }
50
- } catch (error) {
51
- log.textContent = `錯誤: ${error}`;
52
- }
53
- });
 
5
  // 功能開關:是否呼叫 API 獲取額外資訊
6
  const useApi = false;
7
 
8
+ // 檢查瀏覽器是否支援 Web NFC
9
+ if (!('NDEFReader' in window)) {
10
+ log.textContent = '您的瀏覽器不支援 Web NFC。請在 Android 版 Chrome 中嘗試。';
11
+ scanButton.style.display = 'none';
12
+ resetButton.style.display = 'none';
13
+ } else {
14
+ // 依照標準實踐,建立一個可重複使用的 NDEFReader 實例
15
+ const ndef = new NDEFReader();
16
 
17
+ resetButton.addEventListener('click', () => {
18
+ log.textContent = '';
19
+ scanButton.disabled = false; // 重設時重新啟用掃描按鈕
20
+ // 注意:目前的 Web NFC API 沒有提供直接停止掃描的方法。
21
+ // 重設僅會清空日誌並讓您可以重新觸發掃描以更新事件處理器。
22
+ });
23
 
24
+ scanButton.addEventListener('click', async () => {
25
+ log.textContent = '請將 NFC 卡片靠近您的裝置...';
26
+ scanButton.disabled = true; // 按下後禁用按鈕以防 InvalidStateError
27
+
28
+ try {
29
+ await ndef.scan();
30
  log.textContent = '掃描器已啟動,等待卡片...';
31
 
32
+ ndef.onreadingerror = () => {
33
  log.textContent = '讀取 NFC 卡片時發生錯誤。';
34
+ scanButton.disabled = false; // 發生錯誤時重新啟用按鈕
35
+ };
36
 
37
+ ndef.onreading = ({ message, serialNumber }) => {
38
  let output = `> 卡片 UID: ${serialNumber}\n`;
39
 
40
  if (useApi) {
 
55
  // 當 useApi 為 false 時,只顯示 UID
56
  log.textContent += output; // 改為附加資訊
57
  }
58
+ };
59
+ } catch (error) {
60
+ log.textContent = `錯誤: ${error}`;
61
+ scanButton.disabled = false; // 捕獲到錯誤時重新啟用按鈕
62
  }
63
+ });
64
+ }