Как я могу различить вход для сканера и ввод с клавиатуры в Javascript? - PullRequest
0 голосов
/ 01 декабря 2018

Я прошел через ответы и наткнулся на два способа, которые могут помочь в различении входов сканера и клавиатуры.Это можно сделать с помощью:

  • По времени: Входы со сканера работают быстрее, чем ручные вводы с клавиатуры.

  • На основе префикса: Добавьте префикс к штрих-кодам или сканерам (встроенным в устройства сканера) и используйте его для идентификации входов сканера.

Вот ссылки: ссылка 1 , ссылка 2 , которые я использовал для ссылок.

ПроблемаЯ столкнулся с тем, что всякий раз, когда пользователь вручную вводит некоторые клавиши клавиатуры во время запуска события сканирования, он добавляется к входу сканера и приводит к противоречивым результатам.

Вот код, который я использую:

var BarcodeScannerEvents = function(){
  this.initialize.apply(this, arguments);
};

BarcodeScannerEvents.prototype = {
  initialize: function() {
    $(document).on({
      keypress: $.proxy(this._keypress, this)
    });
  },
  _timeoutHandler: 0,
  _inputString: '',
  _keypress: function (e){
    if(this._timeoutHandler){
      clearTimeout(this._timeoutHandler);
    }
    this._inputString += String.fromCharCode(e.which);
    //CHECKS FOR VALID CHARACTERS WHILE SCANNING 
    this._timeoutHandler = setTimeout($.proxy(function(){
      if(this._inputString.length <= 10){
        this._inputString = '';
        return;
      }
      $(document).trigger('barcodescanned', this._inputString);
      this._inputString = '';
    }, this), 20);
  }
};

new BarcodeScannerEvents();

Формат моего штрих-кода: ~ xxx-xxx-xxxxxx, где x может быть любым числом от 0 до 9.Если к штрих-коду добавляется символ, который является числом, это приводит к неправильным вставкам в базу данных.

Я пытался сравнивать события, поступающие с клавиатуры и сканера, но безрезультатно.Я подумал о том, чтобы добавить дополнительные символы перед каждой цифрой, а затем лишить законной силы отсканированный штрих-код, если появятся последовательные цифры.Но я не считаю, что это лучший способ решить эту проблему.Может ли кто-нибудь помочь мне здесь?

Ответы [ 2 ]

0 голосов
/ 23 апреля 2019

Мой первый ответ - научить пользователей не касаться клавиатуры во время сканирования.Тем не менее, тон ваших ответов на ответы и комментарии заставляет вас думать, что вы больше думаете о злонамеренных, преднамеренных попытках испортить данные.

Помимо очень подробного ответа Кунифа, вы не найдетеРешение проблемы, которую вы представляете или сталкиваетесь.Причина в том, что JavaScript будет получать только из входного буфера операционной системы;JS не будет (не может! По соображениям безопасности ОС) различать, как заполнен входной буфер.Если нажатия клавиш и данные сканирования одновременно помещаются в буфер, это проблема, которую следует попытаться устранить на уровне операционной системы или оборудования.JavaScript просто не приспособлен для этого.

0 голосов
/ 05 декабря 2018

Нет необходимости судить по клавиатуре / сканеру штрих-кода.
Если вы решите уведомление о клавише Enter (возврат каретки) как завершение ввода на любом устройстве, вы можете использовать его в качестве простейшего триггера для выполнения поиска цены / вводапроверка значения.

Большинство сканеров могут добавлять суффикс-код к отсканированным данным штрих-кода для уведомления.
Чаще всего используется клавиша Enter, но также может использоваться клавиша Tab.
Посылая суффикс-код посканер штрих-кода, вероятность того, что уведомление сканера и ввод ключа смешаны, намного ниже, чем обнаружение тайм-аута.

Вы можете сделать следующее.

  • Используя установочный штрих-код, он устанавливается для информирования таких клавиш, как Enter, Tab и т. Д., Которые обычно не включаются в штрих-код в качестве суффикса.
  • Свяжите прослушиватель событий для соответствующего суффиксного ключа с полем ввода текста.
  • Код ключа определяется в прослушивателе событий, и, если он является суффиксным ключом, он предполагает, что ввод данных штрих-кода завершен, выполняет обработку, такую ​​как поиск цены / проверка входного значения, иперемещает фокус ввода на следующее поле.

Например, см. Эту статью.
выполнить функцию по клавише ввода


Дополнительно:
Ваши переживания кажутся переполненными ситуациями, которые встречаются не часто.

Если это действительно является проблемой, вам следует отказаться от работы с JavaScript.
Пожалуйста, получите данные сканера с другой программой следующим способом.Пожалуйста, сообщите это приложению каким-либо образом.

Если вы хотите продолжить эмуляцию ввода с клавиатуры, лучше захватить данные до уведомления браузера или приложения.

Функция SetWindowsHookExW / Функция обратного вызова LowLevelKeyboardProc
EasyHook / Indieteur / GlobalHooks

подключитесь к обработке событий ключа linux / uinput-mapper
Драйвер клавиатуры Linux / LKL Linux KeyLogger / kristian/ system-hook
системная клавиатурная зацепка на X под linux / Ошибка при попытке создать глобальную клавиатурную зацепку в Ubuntu Linux / 10.5.2События клавиатуры и указателя


В качестве альтернативы, установите сканер в режим последовательного порта и используйте специальную программу для его приема.

Serial API
JavaScript / JQuery взаимодействует с SerialPort / COM1

Вопросы с тегами opos / Вопросы с тегами pos-for-.net / Вопросы с меткой javapos

...