Spaces:
Running
Running
web nfc
Browse files
script.js
CHANGED
|
@@ -5,24 +5,36 @@ const log = document.getElementById('log');
|
|
| 5 |
// 功能開關:是否呼叫 API 獲取額外資訊
|
| 6 |
const useApi = false;
|
| 7 |
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 11 |
|
| 12 |
-
|
| 13 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 14 |
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
|
|
|
|
|
|
| 19 |
log.textContent = '掃描器已啟動,等待卡片...';
|
| 20 |
|
| 21 |
-
|
| 22 |
log.textContent = '讀取 NFC 卡片時發生錯誤。';
|
| 23 |
-
|
|
|
|
| 24 |
|
| 25 |
-
|
| 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 |
-
}
|
| 48 |
-
log.textContent =
|
|
|
|
| 49 |
}
|
| 50 |
-
}
|
| 51 |
-
|
| 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 |
+
}
|
|
|
|
|
|