按鍵計數器的準確度,描述的是這個工具在瀏覽器將 keydown 事件傳遞到其取得焦點的擷取區域時,能多可靠地回報這些事件——而不是在描述底層鍵盤硬體的運作是否正確。計數器不會讀取掃描碼、量測按鍵行程、偵測抖動、計算每分鐘字數,也不會把打字準確度評分為正確字元與錯誤字元的比較。它回報的內容範圍較窄且定義明確:每一個在擷取區域擁有焦點時送達且被接受的事件,都會使總計與各標籤的頻率遞增一次,並保留最近十個被接受的標籤以便快速查看。超出這個範圍的事項——自動重複事件、在頁面上其他位置擷取到的按鍵,或是在瀏覽器之前就被作業系統攔截的快捷鍵——都是依據明確的政策處理,而不是基於隱藏的假設。因此,當讀者詢問按鍵計數器的準確度時,最有用的回答就是把「瀏覽器交給頁面的內容」與「鍵盤實際發生的物理動作」分開來看,因為在大多數實際情況下,這兩者並不相同。

對瀏覽器式計數器而言,「準確度」代表什麼
對一個在分頁內執行的工具來說,準確度是頁面與瀏覽器之間的契約,而不是對鍵盤本身的量測。按鍵計數器只在可見的擷取區域擁有焦點時接受 keydown 事件。點擊虛線框會把焦點移到此處;在頁面上的其他地方按鍵——包括其他小工具、網址列或瀏覽器介面——都不會產生計數器會記錄的內容。事件處理常式只掛載在那一個可取得焦點的元素上,而 Tab 鍵刻意不列入計數,讓使用鍵盤的使用者能夠離開該區域而不會被困住。
一旦取得焦點,計數器會把每一個被接受的事件轉換為一個正規化後的標籤,使不可變的總計遞增,並更新一個已排序的頻率對映表。字面上的空白鍵會變成 "Space",單一的可見字元在語言環境轉換支援時會轉為大寫,而像 "ArrowUp" 這類具名值則保持可讀的型式。控制字元、代理碼點以及 Unicode 的換行或段落分隔符都會被捨棄,且長度超過四十個 Unicode 碼點的標籤會在儲存時被截斷。空白結果會變成 "Unknown"。這些都不是在量測實體按鍵——而是頁面對瀏覽器 KeyboardEvent.key 值的解讀。
這些標籤與計數的可靠性,本身就是一種準確度:具決定性、可重現,而且繫結到單一、有文件記載的來源。在同一個瀏覽器上以同一序列的被接受事件進行兩次操作,會產生相同的總計與相同的頻率排序。這就是這個工具能夠承諾的事,也是讀者在判斷計數器是否對特定用途「準確」時應該使用的界線。
會改變計數器記錄內容的因素
有幾個真實世界的變數會影響總計中出現的內容。它們並不會讓計數器變得不對;它們改變的是瀏覽器事件串流與工具輸入之間的界線。
- 焦點狀態:在虛線擷取區域之外輸入的事件完全不會被看到。焦點是一個明確的界線,而不是被動的過濾器。
- 重複事件的處理:預設情況下,被瀏覽器標記為重複的事件會被忽略,所以按住一個鍵只算一次。啟用按住按鍵重複計數的選項,則會納入每一次被標記的重複事件。
- 瀏覽器與作業系統的快捷鍵:在頁面看到之前就被攔截的組合鍵——Ctrl+L、Cmd+W、系統層級的快捷鍵、無障礙快速鍵——永遠不會送達計數器。
- 擴充功能、輸入法與無障礙工具:這些工具可能會改寫、抑制或產生頁面所收到的 keydown 事件。計數器信任瀏覽器的重複旗標,並不會區分事件的來源。
- 合成事件:透過指令碼呼叫 dispatchEvent 所產生的事件會被當作一般的瀏覽器事件接受。如果某個指令碼從主控台觸發 50 個 "A" 事件,計數器就會顯示 50。
- 行動裝置鍵盤:標籤與編輯行為可能與桌面配置不同,且組合後的文字未必與實體按鍵一對一對應。
這些因素都不代表計數器有 bug。它們正是「計算瀏覽器 keydown 事件」這個定義的一部分。若想更廣泛地討論瀏覽器能看到與不能看到什麼,滑鼠連點測試準確度:間隔時間的真正意涵這篇指南以點擊事件為例,說明了同樣的概念。
如何取得可靠的計數
- 點擊虛線擷取區域,讓它取得焦點。邊框應該會顯示焦點已移至該元素。
- 按下中性測試鍵——例如 A、S、D、J、K、L 等字母或數字——絕對不要使用真實的密碼、復原碼或個人訊息。
- 決定重複事件的處理方式:若希望每次實體按住只算一次,請關閉按住按鍵重複計數;若要納入每一次被瀏覽器標記為重複的事件,則將其開啟。
- 觀察顯示內容,隨著每個被接受的事件,總計、最近十個標籤與已排序的頻率表都會更新。
- 隨時按 Tab 鍵,可以在不送出計數按鍵的情況下離開擷取區域。Tab 是刻意設計為不列入計數的。
- 點擊重設計數器,即可清除總計、頻率對映表與最近的歷史紀錄,重新開始一個全新的工作階段。所有數值都儲存在本機,在頁面重新整理後不會保留。
堅持只使用中性測試鍵,是讓結果保持可重現性最有用的一個習慣。任何敏感的內容都不應該輸入擷取區域——這不是針對計數器準確度的警告,而是測試工具的一般性原則。
按鍵計數器與鍵盤測試器的比較
這兩個工具解決的是不同的問題,而把它們搞混,正是讀者一開始搜尋「準確度」的常見原因。鍵盤測試器的設計目的是點亮實體按鍵配置,讓使用者找出不會產生事件,或在錯誤的按鍵上觸發的按鍵。按鍵計數器則聚焦於數量與分佈——發生了多少次被接受的 keydown 事件、最常出現的瀏覽器標籤是什麼,以及最近的順序為何。
| 功能 | 按鍵計數器 | 鍵盤測試器 |
|---|---|---|
| 計算 keydown 事件 | 是 | 經常 |
| 顯示各按鍵頻率表 | 是 | 否 |
| 顯示最近標籤歷史 | 是(最近 10 個) | 否 |
| 繪製實體按鍵配置 | 否 | 是 |
| 識別鍵盤型號 | 否 | 否 |
| 診斷故障的軸體 | 否 | 是 |
| 計算 WPM 或打字準確度 | 否 | 否 |
| 顯示掃描碼 | 否 | 否 |
| 在目前分頁中離線執行 | 是 | 視情況而定 |
這個界線之所以重要,是因為讀者有時會期待打字的語意——正確字元除以總字元數。按鍵計數器並不提供這項結果。它提供的是來自瀏覽器的事件計數與標籤分佈;而 打字測試工具才是查詢 WPM 與逐字元準確度的地方。
影響計數可靠性的限制
即使謹慎處理焦點,仍然存在若干限制。產品契約會明確列出這些限制,也說明了為什麼計數器會誠實地界定範圍,而不會承諾超出瀏覽器所能提供的能力。
| 情境 | 計數器顯示的內容 | 原因 |
|---|---|---|
| 在網址列中輸入 | 不列入計數 | 擷取區域未取得焦點 |
| 按住按鍵,重複計數關閉 | 整個按住期間只遞增一次 | 預設忽略瀏覽器標記的重複事件 |
| 按住按鍵,重複計數開啟 | 每一個收到的事件遞增一次 | 每一次瀏覽器標記的重複事件都會計入 |
| 取得焦點時按 Tab | 總計不變 | Tab 刻意設計為不計數,以利無障礙地離開焦點 |
| 作業系統快捷鍵(例如 Ctrl+L) | 不列入計數 | 作業系統或瀏覽器在頁面之前就攔截了事件 |
| 來自指令碼的合成事件 | 視為一般事件計入 | 頁面無法區分合成事件與真實事件 |
| 行動裝置虛擬鍵盤 | 計入瀏覽器送達的所有內容 | 標籤與編輯行為與桌面配置不同 |
| 密碼管理員自動填入 | 每一個發出的 keydown 都會計入 | 頁面只看得到瀏覽器事件,看不到事件來源 |
對於想要更嚴格地測試硬體行為的讀者——例如哪些按鍵會產生事件、某個軸體是否卡住、某個按鍵是否故障——鍵盤測試器工具提供了以配置為基礎的替代方式。每個工具回答的是不同的問題,而準確度代表的是回答那個真正被提出的問題。
實務上什麼算是「準確」
如果讀者需要計數與實體按鍵次數完全一致,那麼任何瀏覽器端的工具都無法保證,因為計數器回報的是瀏覽器事件而非硬體事實。如果讀者需要計數與瀏覽器送達給取得焦點之元素的 keydown 事件數量一致,那麼計數器在設計上就是準確的:每一個被接受的事件都會使總計遞增一次,頻率對映表以不可變的方式更新,最近十個標籤的範圍有明確界定,排序在平手情況下也保持穩定。
可靠的契約僅限於產品定義的標籤清理、明確的重複政策、不可變的計數更新、十個標籤的最近檢視、穩定的頻率排序,以及可將工作階段重置為零的手動重設。其他所有事項——打字準確度、軸體健康度、輪詢率、延遲、掃描碼、配置正確性——都屬於另一個有著不同契約的工具。
相關閱讀:滑鼠滾輪測試準確度:數字的意義。