我正在尝试将一些条形码扫描到浏览器中包含的文本字段,但它会在任何浏览器(chrome、firefox、ie)中打开下载页面。 我猜测有一些相当于 CTRL + J 的输入会触发浏览器打开下载页面。
有人遇到过这个问题吗?有没有办法通过它(假设我的客户无法更改其扫描仪配置和浏览器配置)?
谢谢。
虽然现在发布答案已经晚了,但我希望这对将来的人有帮助。
问题是由条码阅读器发送的结束字符引起的。我的条形码阅读器的默认设置是输入后发送
CR+LF
。不幸的是,这会在 Chrome 中打开下载页面。解决此问题的方法非常简单,您可以将以下脚本添加到页面中以忽略从条形码扫描仪发送的结束字符,而不是配置扫描仪本身(这可能很棘手):
<script>
document.addEventListener('keydown', function(event) {
if( event.keyCode == 13 || event.keyCode == 17 || event.keyCode == 74 )
event.preventDefault();
});
</script>
还有一个旧的 bug 用 chrome 为此打开,但这已关闭/未解决,因为这不是一个错误,而是更多的输入配置问题。
您必须设置扫描仪。
Ctrl-J = 0x0A = Linefeed for Unix-like Systems
检查您的扫描仪型号的手册。通常您可以找到一些条形码来更改您的设置,否则就是更改您的驱动程序或者您的驱动程序中有相应的设置。
像
(event.keyCode == 13 || event.keyCode == 17 || event.keyCode == 74)
那样进行控制并不能解决问题。因为如果条形码值中包含“J”字符,您将无法真正获得barcode
结果。我们尝试添加额外的 e.ctrlKey
控制。但这次我们只从条形码中检索一个字符。看来通过js
解决问题是很难的。也许最好的选择是更改扫描仪设置。
//I managed to focus on exactly what was being sent by Chrome, and ignore just that:
var lastKeyCode = "";
document.addEventListener('keydown', function (event) {
if (lastKeyCode == "ControlLeft" && event.code == "KeyJ")
event.preventDefault();
lastKeyCode = event.code;
});
Google Chrome 的自动控制快捷方式管理器
使用此扩展禁用浏览器的任何类型的快捷键 而且它简单且反应灵敏。
添加此 chrome 扩展后,它将向您展示教程。
问题可以通过检查
e.ctrlKey
是否为true来解决,然后我们可以忽略按键。如果按下 Ctrl
键,则 e.ctrlKey
为 true
<script>
let data = ''
window.onload = function () {
window.document.body.addEventListener('keydown', function(event){
if( event.keyCode == 13 || event.keyCode == 16 || event.keyCode == 17 ) {
event.preventDefault();
return;
}
if(event.ctrlKey) {
event.preventDefault();
return;
}
data += event.key
console.log(data)
});
}
</script>
通过使用此代码,我们可以阻止 chrome 导航到下载页面。
我仅在使用 chrome 时遇到此问题。第一次成功拍摄后,Firefox 焦点将转到谷歌搜索栏。我有一个曼哈顿条形码阅读器。 目前,我使用 Web(也称为顿悟)进行管理,它是唯一有效的方法,但它不是“常见的客户建议”
我让它在我这边工作,我的问题是条形码正在工作
barcodeNumbers control j enter
。我不需要控件 j,因为它打开了 Firefox 下载窗口,并且我需要 Enter 将其输入条形码搜索,所以我编写了一个脚本来忽略控件 j。请务必进行测试以检查它是否适合您。我只测试了最后 10 分钟及其工作情况,但需要进行更长时间的监控,以确保所有其他条形码不会产生副作用。
<script>
// remove ctrl j from any input
let barcodeData = '';
document.addEventListener('keydown', function(event) {
if (event.keyCode === 13) { // 13 = enter key
// Process the barcode data when Enter is pressed
// console.log('Barcode data:', barcodeData);
barcodeData = ''; // Reset the barcode data
} else if (event.ctrlKey && event.keyCode === 74) { // 74 = j key
// Ignore Ctrl+J (keycode 10 line feed LF)
event.preventDefault();
} else {
// Append the key to the barcode data
barcodeData += event.key;
}
});
</script>