
干我們這行最怕的不是業(yè)務(wù)邏輯復(fù)雜而是掃碼槍和中文輸入法突然打起來。我做過不少倉儲、物流、零售的信息化項目現(xiàn)場最常見的鬧鬼場景就是收銀員舉起掃碼槍對著條碼一掃文本框里沒出現(xiàn)那串?dāng)?shù)字反而蹦出一段拼音或者數(shù)字被吞了一半再嚴(yán)重點直接彈出一個中文候選框把后面所有內(nèi)容全吃了。員工一臉懵運維被連環(huán)Call最后發(fā)現(xiàn)鍋既不在掃碼槍也不在業(yè)務(wù)系統(tǒng)而是中文輸入法把掃碼槍的輸入當(dāng)成拼音給“截胡”了。這個問題的根子其實很簡單大多數(shù)USB掃碼槍在電腦眼里就是一臺標(biāo)準(zhǔn)鍵盤而中文輸入法又是一個全局鍵盤監(jiān)聽器兩者疊加在一起掃碼槍每敲一個字符都會先經(jīng)過輸入法過濾一遍。要解決它可以從硬件配置、系統(tǒng)策略、應(yīng)用代碼三層入手今天我按從簡單到徹底的順序把每個方案的操作細(xì)節(jié)和踩坑經(jīng)驗都寫清楚。這篇文章適合ERP/WMS實施、門店收銀運維、Linux桌面用戶以及所有被掃碼輸入問題折磨過的人。1. 先把沖突的根因搞清楚掃碼槍就是一臺“高速鍵盤”1.1 掃碼槍在電腦眼里到底是什么設(shè)備現(xiàn)在市面上的主流掃碼槍比如霍尼韋爾、Zebra、新大陸這些牌子出廠默認(rèn)的USB接口模式基本都是“USB HID Keyboard”也就是USB鍵盤模式。你把掃碼槍插到電腦上系統(tǒng)不會裝任何專屬驅(qū)動因為操作系統(tǒng)已經(jīng)把它識別成一把鍵盤了。掃一個條碼時掃碼槍把條碼解碼成一串ASCII字符然后以極快的速度模擬鍵盤敲擊把這串字符一個個“打”出來最后再補一個回車或者Tab作為結(jié)束符。這個模式最大的好處是免驅(qū)、即插即用任何軟件里的文本輸入框都能直接接收掃碼結(jié)果。但壞處也在這里——它模擬的是鍵盤而鍵盤的每一個按鍵都要先經(jīng)過操作系統(tǒng)當(dāng)前激活的輸入法。換句話講當(dāng)你把輸入法切成中文拼音狀態(tài)時掃碼槍掃進去的字母根本不會被當(dāng)作普通字符處理而是被當(dāng)成拼音音節(jié)送進了輸入法的組詞窗口。我在現(xiàn)場見過最典型的情況是條碼內(nèi)容是“SP20230915001”員工掃完以后輸入框里出現(xiàn)的是“shangp20230915”加一串亂碼因為“sp”被輸入法當(dāng)成聲母在拼后面的數(shù)字又正好撞上了候選詞的序號鍵。這種問題只要輸入法處于中文狀態(tài)幾乎無法靠“手速”規(guī)避因為掃碼槍的速度比人手快太多了輸入法根本來不及區(qū)分這是掃碼還是真人打字。1.2 中文輸入法到底“吃”掉了哪些字符要理解沖突的完整鏈路得知道中文輸入法在鍵盤事件里做了什么。以常見的搜狗拼音和微軟拼音為例當(dāng)輸入法處于中文模式時你按下的字母鍵會進入拼音串緩沖區(qū)屏幕上會出現(xiàn)一個未確認(rèn)的拼音字符串此時如果按下數(shù)字鍵輸入法會把數(shù)字當(dāng)成候選詞序號而不是數(shù)字本身按下分號、引號之類可能被當(dāng)成拼音分隔符最后按下回車輸入法會把這串拼音組合成中文提交給程序而不是提交原始字符。所以一條條碼在掃碼槍眼里是清清楚楚的“A B C 1 2 3”經(jīng)過中文輸入法之后實際到達業(yè)務(wù)系統(tǒng)的內(nèi)容可能變成三種情況一是字母被拼成中文數(shù)據(jù)徹底損壞二是部分?jǐn)?shù)字被候選詞選中數(shù)據(jù)變長或者變短三是輸入法彈窗一直掛著掃碼槍發(fā)來的回車被輸入法消費掉業(yè)務(wù)系統(tǒng)根本沒收到回車提交信號。具體是哪種表現(xiàn)取決于條碼里包含哪些字符、輸入法處于什么狀態(tài)但結(jié)果都一樣——數(shù)據(jù)錯亂流程卡殼。還有一個容易被忽視的坑是輸入法的全角/半角狀態(tài)。有些輸入法的全角模式會把ASCII字母和數(shù)字轉(zhuǎn)成全角字符比如“ABC123”變成“”。這種數(shù)據(jù)存進數(shù)據(jù)庫以后條碼匹配直接失效而且從界面上看長得幾乎一模一樣排查起來非常討厭。1.3 沖突為什么在Linux上更明顯Windows上有輸入法的程序能通過一些接口配合而Linux的中文輸入法框架比如IBus和Fcitx接管鍵盤事件更徹底。很多人剛在Ubuntu上裝好中文輸入法高高興興插上掃碼槍測試結(jié)果發(fā)現(xiàn)掃出來的內(nèi)容要么進了拼音候選框要么直接沒反應(yīng)。這也解釋了為什么“ubuntu中文輸入法安裝”“l(fā)inux虛擬機中文輸入法”這類搜索熱度一直很高——裝好輸入法只是開始怎么讓它不搗亂才是真正的麻煩。比如CachyOS、Kubuntu這些發(fā)行版用戶抱怨游戲里中文輸入法有問題底層其實都是同一個原因輸入法框架在搶鍵盤輸入。2. 方案選型別一上來就改代碼2.1 三層方案的適用范圍遇到掃碼槍和輸入法沖突我強烈建議不要第一時間想著改業(yè)務(wù)代碼。代碼改動成本高、涉及發(fā)版、還有回歸風(fēng)險而且很多問題根本不是代碼能解決的。正確的思路是按層級從低到高排查和解決。處理層級具體手段改動成本穩(wěn)定度適用場景硬件配置改掃碼槍后綴、大小寫、切換串口模式低高所有場景尤其適合沒有源碼的系統(tǒng)系統(tǒng)策略默認(rèn)輸入法設(shè)為英文、按程序禁用IME中中Windows為主的門店/收銀電腦應(yīng)用代碼ImeMode/CSS/JS事件處理高高自主開發(fā)的Web或桌面應(yīng)用這三層不是互斥的實際項目中我通常做“硬件配置系統(tǒng)策略”組合業(yè)務(wù)系統(tǒng)如果是自己開發(fā)的再補一層應(yīng)用代碼兜底。三層都做了以后基本上可以做到掃碼槍在任何狀態(tài)、任何時候都不會被輸入法干擾。2.2 不同業(yè)務(wù)場景的推薦組合場景不同方案的優(yōu)先級完全不一樣。門店收銀臺電腦上裝了搜狗拼音或者微軟拼音員工偶爾還要用中文備注這種情況不能把輸入法卸載我的做法是把系統(tǒng)默認(rèn)輸入狀態(tài)改成英文再給收銀軟件單獨設(shè)一個“永遠(yuǎn)英文”的規(guī)則。倉儲物流的PDA或者固定工位掃碼是純高頻動作輸入法基本用不上最穩(wěn)的辦法是直接把掃碼槍切到USB虛擬串口模式用程序讀串口數(shù)據(jù)徹底繞開鍵盤模擬。自助機、無人售貨機這類無人值守設(shè)備就更簡單了——這類設(shè)備就應(yīng)該禁用中文輸入法或直接不啟動輸入法框架只保留英文鍵盤業(yè)務(wù)應(yīng)用全部走觸摸屏輸入控件。選型的時候記住一個原則能用硬件配置解決的不要動系統(tǒng)能用系統(tǒng)策略解決的不要動代碼。因為硬件和系統(tǒng)層面的方案是全局生效的而代碼方案只對特定控件生效管得了這一個頁面管不了下一個頁面。3. 落地實操一先把掃碼槍調(diào)老實硬件側(cè)3.1 找對說明書就是成功的一半很多人搜“霍尼韋爾掃碼槍條碼大全”其實要找的就是它的編程手冊Configuration Guide里面一頁一頁全是配置條碼?;裟犴f爾、Zebra、新大陸這幾個主流品牌都有PDF版的編程手冊廠商官網(wǎng)上直接能下載。配制掃碼槍的原理都差不多先用掃碼槍掃一個“Set/Enter Configuration”進入配置模式再掃功能條碼最后掃“Exit/End”退出配置模式。配置碼是用掃碼槍掃進去的不是用鍵盤輸進去的這點一定要記住。配置之前先看兩個信息一是掃碼槍的具體型號編程手冊是按型號區(qū)分的用錯型號的手冊容易掃出莫名其妙的配置二是當(dāng)前的使用場景是需要加回車后綴、Tab后綴還是需要切換串口模式不同需求掃的碼完全不同。3.2 三個必改的基礎(chǔ)配置第一個必改項是后綴符。絕大多數(shù)業(yè)務(wù)系統(tǒng)的輸入框都依賴掃碼槍在條碼末尾補一個回車來觸發(fā)查詢或錄入。如果掃碼槍沒有配置后綴掃完條碼光標(biāo)還停在那里員工還得手動按回車效率低不說還容易漏。常見的配置是加“CRLF”或者單獨加“CR”也有場景需要加Tab跳到下一個輸入框。具體掃碼在手冊里搜“Add Suffix”就能找到。第二個必改項是鍵盤布局。掃碼槍默認(rèn)一般按美式鍵盤輸出如果你的系統(tǒng)或者輸入法改了鍵盤布局為法式、德式或者中日韓布局掃出來的符號很容易錯位。比如掃碼槍輸出一個分號在法式鍵盤布局下可能變成了其他字符。我建議把掃碼槍固定設(shè)置為“USB Keyboard (US)”并確認(rèn)系統(tǒng)布局也是US兩邊對不上是很多隱蔽問題的根源。第三個必改項是字符集和大小寫。有些掃碼槍支持Caps Lock狀態(tài)控制如果系統(tǒng)開了大寫鎖定掃碼槍輸出的字母可能全部變成大寫數(shù)據(jù)庫里存的卻是小寫導(dǎo)致匹配失敗。最好在掃碼槍配置里把字母大小寫固定住不要跟隨系統(tǒng)Caps Lock狀態(tài)。還有條碼里的特殊字符比如連字符、斜杠要確認(rèn)掃碼槍按ASCII輸出而不是被轉(zhuǎn)換成其他編碼。3.3 最徹底的硬件方案USB虛擬串口模式如果業(yè)務(wù)系統(tǒng)的開發(fā)團隊在自己手上我強烈推薦把掃碼槍從鍵盤模式切換成USB虛擬串口模式。這個模式下掃碼槍不再模擬鍵盤而是通過USB虛擬成一個COM口掃碼數(shù)據(jù)直接通過串口流傳給程序輸入法完全碰不到它任何輸入法狀態(tài)下掃出來的數(shù)據(jù)都是原始條碼。以霍尼韋爾常見的型號為例編程手冊里有一個“USB Configuration”區(qū)段里面有“USB HID Keyboard”“USB Serial”“USB OEM”等選項。掃一下“USB Serial”的條碼再插回電腦系統(tǒng)會識別出一個新的COM口。Windows下一般需要安裝廠商的USB串口驅(qū)動Linux下通常會識別成/dev/ttyACM0或者/dev/ttyUSB0。程序讀取串口數(shù)據(jù)的代碼非常簡單以Python為例import serial ser serial.Serial( portCOM7, # Windows下填實際COM口號Linux下填/dev/ttyUSB0 baudrate115200, # 與掃碼槍虛擬串口的波特率保持一致 timeout0.2 ) while True: data ser.readline() if data: code data.decode(ascii, errorsignore).strip() print(掃描結(jié)果:, code) # 這里寫你的業(yè)務(wù)處理邏輯串口模式的缺點是每個掃碼槍會占一個COM口多臺設(shè)備需要區(qū)分端口號而且原來的“免驅(qū)免開發(fā)”優(yōu)勢沒了必須要寫點程序。但對于數(shù)據(jù)準(zhǔn)確性要求極高的MES、倉庫系統(tǒng)來說這個代價完全值得。我在一個制造業(yè)項目里把全場二十多把掃碼槍都切成了串口模式之后再也沒有人來找我報“掃碼掃出來拼音”的問題了。3.4 配置前先備份改動后要驗證改掃碼槍配置之前強烈建議先找到編程手冊里的“Factory Default/Restore Defaults”條碼掃描一下做個隱性備份——說白了就是記下恢復(fù)出廠設(shè)置的方法以防改亂了。然后每次改完配置立即在記事本里掃幾次測試條碼確認(rèn)輸出格式滿足預(yù)期。我習(xí)慣把常用的配置條碼打印成一張卡片放在每臺掃碼工位旁邊新員工或者臨時維護人員拿到掃碼槍就能自查。4. 落地實操二Windows系統(tǒng)輸入法策略4.1 把系統(tǒng)默認(rèn)輸入狀態(tài)改成英文Windows的默認(rèn)輸入法是可以改的。以Windows 10和Windows 11為例進入“設(shè)置 → 時間和語言 → 語言和區(qū)域”確保列表里有“英語(美國)”或“英語(英國)”然后在“鍵盤”設(shè)置里把“替代默認(rèn)輸入法”改選為“英語(美國) - 美國鍵盤”。改完之后系統(tǒng)開機、打開新窗口、焦點切換時輸入狀態(tài)默認(rèn)都會是英文只有員工主動按Win空格或CtrlShift切換時才會進入中文輸入。這里有個細(xì)節(jié)不要卸載中文輸入法只改默認(rèn)狀態(tài)。因為門店或者辦公室總有人要輸中文備注把中文輸入法卸載了會引發(fā)新的抱怨。正確做法是讓系統(tǒng)永遠(yuǎn)以英文起步把中文輸入法“藏”在候選列表里誰要輸入中文誰自己切。Windows還有一個容易被忽略的選項叫“允許我為每個應(yīng)用窗口使用不同的輸入法”這個開關(guān)在“高級鍵盤設(shè)置”里。打開之后每個應(yīng)用可以記住自己上次的輸入法狀態(tài)。你可以把WMS客戶端設(shè)成英文狀態(tài)把微信、瀏覽器設(shè)成中文狀態(tài)兩者互不干擾。這個功能實測對掃碼場景很有效但要注意它依賴應(yīng)用的“設(shè)置窗口信息”能力有些老舊的MFC程序不一定支持。4.2 給指定程序強制英文輸入搜狗、微軟拼音這類輸入法的高級設(shè)置里通常有“按程序記憶輸入狀態(tài)”或者“針對特定程序關(guān)閉輸入法”的選項。比如搜狗拼音的“屬性設(shè)置 → 高級 → 輸入法跟隨程序”可以添加某個exe指定它啟動后自動切到英文。這個方案不需要改代碼實施人員到現(xiàn)場點點鼠標(biāo)就能配好適合沒有源碼的第三方業(yè)務(wù)系統(tǒng)。如果是自己開發(fā)的WinForms/WPF程序在控件層面就能直接禁掉輸入法。WinForms的TextBox有一個ImeMode屬性設(shè)成Disable以后這個輸入框會明確告訴系統(tǒng)“我不需要中文輸入法”聚焦到該控件時輸入法會自動失效textBoxScan.ImeMode ImeMode.Disable;WPF的TextBox沒有ImeMode屬性要用附加屬性InputMethod.SetIsInputMethodEnabled(textBoxScan, false);這套機制的原理是Windows的TSF文本服務(wù)框架允許應(yīng)用程序聲明自己對輸入法的需求控件級別聲明“禁用”后輸入法的組合窗口根本不會在這個控件上彈出。這是應(yīng)用層最干凈的做法比在全局切輸入法可靠得多。4.3 Web頁面里的處理方式現(xiàn)在不少收銀和倉庫系統(tǒng)改成了Web端瀏覽器里的輸入法控制比桌面端要麻煩一點。早年間有一個CSS屬性叫ime-mode: disabled可以直接禁止輸入框的輸入法input typetext idscanInput styleime-mode: disabled; autocompleteoff這個屬性不是標(biāo)準(zhǔn)屬性但這么多年下來Chromium內(nèi)核的瀏覽器還是兼容的實測在Chrome、Edge上依然有效。Firefox現(xiàn)在對它的支持不太穩(wěn)定所以不能只依賴這個CSS屬性還要在JavaScript里配合處理輸入法組合事件。核心思路是監(jiān)聽compositionstart和compositionend事件標(biāo)記當(dāng)前是否處于輸入法組合狀態(tài)組合中的輸入一律不處理const el document.getElementById(scanInput); let composing false; el.addEventListener(compositionstart, () { composing true; }); el.addEventListener(compositionend, () { composing false; }); el.addEventListener(input, (e) { if (e.isComposing || composing) { return; // 輸入法組合中不處理 } // 掃碼槍通常以回車結(jié)尾檢測到回車就提交 if (el.value.endsWith(\n) || el.value.endsWith(\r)) { handleScan(el.value.trim()); el.value ; } });這段代碼看著簡單但能把輸入法組合過程中的“假輸入”全部過濾掉。我見過很多前端同事只監(jiān)聽input事件結(jié)果掃碼時值半截半截地進來提交了好幾次這就是沒處理組合事件的鍋。5. 落地實操三Linux/Ubuntu環(huán)境怎么處理5.1 Linux輸入法框架的沖突更深Linux下的中文輸入法主流是IBus和Fcitx4/Fcitx5。很多文章都在教怎么在Ubuntu上安裝中文輸入法但很少有人講裝完之后怎么和USB掃碼槍共存。和Windows相比Linux的輸入法框架對鍵盤事件接管得更徹底GTK和Qt程序通過GTK_IM_MODULE、QT_IM_MODULE環(huán)境變量把輸入提交給輸入法框架輸入法框架如果處于中文狀態(tài)掃碼數(shù)據(jù)同樣會被拼成拼音。熱詞里出現(xiàn)的“debian安裝中文輸入法”“kubuntu中文輸入法”“sway中文輸入法”“cachyos steam中文輸入法問題”底層都是這個機制在起作用的。處理Linux下的沖突核心手段不是改掃碼槍硬件配置思路和Windows一樣而是調(diào)整輸入法框架的狀態(tài)和程序啟動環(huán)境。5.2 用命令強制輸入法切到英文Fcitx5提供了命令行工具fcitx5-remote可以實時切換輸入法狀態(tài)。強制切到英文鍵盤狀態(tài)fcitx5-remote -s keyboard-us切回拼音輸入法fcitx5-remote -s pinyinIBus的切換命令是ibus engine# 切到英文 ibus engine xkb:us::eng # 切到拼音 ibus engine libpinyin在實際項目里我一般會在業(yè)務(wù)程序的啟動腳本里加上切英文的命令程序一啟動就自動把輸入法狀態(tài)固定為英文。比如寫一個啟動腳本start_wms.sh#!/bin/bash # 強制輸入法切到英文 fcitx5-remote -s keyboard-us 2/dev/null || true # 或 ibus engine xkb:us::eng # 用干凈的輸入法環(huán)境啟動業(yè)務(wù)程序 env GTK_IM_MODULE QT_IM_MODULE XMODIFIERSimnone ./wms_client最后一行是關(guān)鍵啟動程序時把GTK_IM_MODULE和QT_IM_MODULE設(shè)為空把XMODIFIERS設(shè)為imnone這樣業(yè)務(wù)程序完全不會感知到輸入法框架掃碼數(shù)據(jù)直接進文本框無論系統(tǒng)輸入法處于什么狀態(tài)都不影響。這個方案在Ubuntu 22.04、Debian 12上我都實測過很穩(wěn)定。5.3 自助機、虛擬機、遠(yuǎn)程桌面的特殊處理自助機和無人值守設(shè)備最干凈的辦法是干脆不讓輸入法框架啟動。在systemd服務(wù)或者自動啟動腳本里把輸入法框架的進程關(guān)掉或者干脆用精簡的桌面環(huán)境不裝輸入法。這種設(shè)備上中英文輸入本來就不需要留著輸入法反而增加故障面。虛擬機里的情況要復(fù)雜一些。如果掃碼槍的USB設(shè)備直通給虛擬機那么處理方式和物理機基本一樣關(guān)鍵在于虛擬機里裝的輸入法框架。如果掃碼槍其實插在宿主機上而宿主機有中文輸入法激活那么鼠標(biāo)焦點在虛擬機窗口上時鍵盤事件會先經(jīng)過宿主機的輸入法這時候要去宿主機把輸入法切到英文再切進虛擬機操作。遠(yuǎn)程桌面也要留個心眼。Windows的RDP里有一個鍵盤鉤子設(shè)置控制鍵盤輸入是在本機處理還是在遠(yuǎn)程計算機處理。如果設(shè)置不當(dāng)本機的輸入法狀態(tài)會干擾遠(yuǎn)程會話里的掃碼輸入。我在現(xiàn)場見過遠(yuǎn)程桌面里掃碼字符全被本機搜狗輸入法吃了的情況把RDP的鍵盤鉤子改成“在遠(yuǎn)程計算機上”就解決了。6. 常見問題與排查技巧6.1 癥狀速查表排查掃碼槍輸入問題最高效的方式是按癥狀對號入座。我把這幾年遇到的情況整理成了一張表癥狀表現(xiàn)可能原因快速處理掃出來是一段拼音/中文輸入法處于中文拼音狀態(tài)切到英文狀態(tài)或給控件禁用IME數(shù)字少了或者變了輸入法候選框吃掉了數(shù)字鍵檢查IME組合狀態(tài)改用串口模式字母變成全角字符輸入法全角/半角狀態(tài)異常切換全角半角或在掃碼槍配置固定ASCII掃完沒有自動查詢/換行掃碼槍沒配置回車后綴給掃碼槍加CR/CRLF后綴只有某些輸入框正常應(yīng)用控件未禁用IME桌面端設(shè)ImeModeWeb端處理composition事件輸入框里出現(xiàn)重復(fù)字符掃碼槍配置了重復(fù)前綴或傳感延遲問題檢查前綴/后綴配置恢復(fù)出廠設(shè)置重配Linux下掃入候選框IBus/Fcitx搶鍵盤事件用fcitx5-remote/ibus engine切英文或清空IM_MODULE6.2 現(xiàn)場排障三板斧第一板斧在記事本里掃。遇到掃碼槍輸入異常先打開記事本掃一下。如果記事本里顯示正常說明掃碼槍和系統(tǒng)層面沒問題問題出在業(yè)務(wù)應(yīng)用的控件或者頁面代碼上。如果記事本里都不正常再往下查輸入法狀態(tài)和掃碼槍配置。第二板斧手動切到英文輸入法再掃。按一下Shift或者Win空格把輸入法切成英文狀態(tài)再掃一次。如果切了英文就正常說明問題就是輸入法沖突如果切成英文還是不對那就要懷疑掃碼槍配置和數(shù)據(jù)本身了。第三板斧換一把筆記本自帶鍵盤或者外接鍵盤手動敲一遍條碼內(nèi)容。如果手動敲入正常掃碼槍輸入不正常問題很可能出在掃碼槍的字符映射或后綴配置上。這三板斧做完九成的問題都能定位到具體環(huán)節(jié)。6.3 我踩過的坑這些年我踩過不少坑挑幾個有代表性的說說。第一個坑是掃碼槍被誤配了前綴。有次在客戶現(xiàn)場員工掃碼后輸入框里多了“F4”兩個字符一開始以為是輸入法后來發(fā)現(xiàn)是有人拿錯說明書掃了“Add Prefix F4”的配置碼導(dǎo)致掃碼槍每次輸出前先加一個F4??雌饋硐袷强旖萱I觸發(fā)其實是配置串了。所以排查輸入法問題時一定要留個心眼先把掃碼槍恢復(fù)出廠設(shè)置再配。第二個坑是全角符號。某次導(dǎo)數(shù)據(jù)發(fā)現(xiàn)一批條碼里混著全角的冒號和連字符數(shù)據(jù)庫匹配不上。查到最后是員工手動切換了輸入法的全角模式掃碼槍輸出的半角符號全被輸入法轉(zhuǎn)成了全角。這種問題從界面上看幾乎無法分辨最后用腳本比對ASCII碼才發(fā)現(xiàn)。從此我記住了凡是掃碼場景必須把輸入法全角半角這個隱形開關(guān)也納入檢查范圍。第三個坑是Web頁面的compositionend事件。我在一個Vue項目里處理掃碼輸入起初只在input事件里去重判斷回車結(jié)果掃碼掃到一半條碼里有字母“u”和“i”連在一起被輸入法當(dāng)成拼音組合input事件遲遲不觸發(fā)頁面像是卡死了一樣。后來加了compositionstart/compositionend標(biāo)記再用e.isComposing判斷問題才徹底解決。這個坑提醒我前端開發(fā)在掃碼輸入場景里組合事件處理是必須寫的不是可選項。7. 一些實在話這幾年的經(jīng)驗總結(jié)下來解決掃碼槍和中文輸入法沖突最核心的思路就是一句話讓掃碼數(shù)據(jù)永遠(yuǎn)別經(jīng)過輸入法的腦子。硬件層面可以切串口模式系統(tǒng)層面可以把默認(rèn)輸入狀態(tài)鎖死成英文應(yīng)用層面可以給控件顯式禁用輸入法這三層里任意做通一層問題基本上就能壓下去三層全做通基本可以高枕無憂。最后再分享一個實用的小技巧。我習(xí)慣給每臺掃碼工位做一張“掃碼槍配置卡”上面印著掃碼槍型號、配置好的后綴類型、串口模式還是鍵盤模式、以及輸入法策略說明。新員工入職不需要懂原理照著卡片自查就能解決一半問題。這個習(xí)慣幫我省了無數(shù)次遠(yuǎn)程支持的電話也讓我在項目驗收時少挨了不少罵。你要是正在被掃碼槍和輸入法的破事折磨不妨也從這張卡片開始。