Нажмите кнопку, используя Javascript / Распознавание речи / tampermonkey

В настоящее время я могу нажать любую из 4 кнопок в HTML, используя Javascript, запущенный в tampermonkey, чтобы выбрать идентификатор кнопки DIV, которую нужно щелкнуть. Однако я хочу использовать распознавание речи, чтобы щелкнуть любую из 4 кнопок, произнеся любое из следующих слов: НЕТ, ОДИН, ДВА, ТРИ. Я предполагаю, что речевой сценарий изменит слово, которое я говорю, на текст, который будет добавлен в массив javascript, который будет сопоставлен с идентификатором DIV, который нужно щелкнуть. Как этого добиться с помощью javascript. Благодарность

  document.getElementById('radio0').click();

    <div class = "radio-container">
     <div class = "col-6">
      <button id = "radio0">None</button>
     </div>
    <div class = "col-6">
     <button id = "radio1">One</button>
    </div>
    <div class = "col-6">
     <button id = "radio2">Two</button>
    </div>
    <div class = "col-6">
     <button id = "radio3">Three +</button>
    </div>
  </div> 
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
1 253
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете выбрать div, проверив innerHTML div с вводом, который вы получаете от речи к тексту. Чтобы сопоставить элемент, вы можете использовать ответы по этой ссылке Javascript .querySelector найти <div> по innerTEXT

Ответ принят как подходящий

Придумайте массив названий кнопок. Поскольку SpeechRecognition распознает числа как фактические числа (например, 1, а не one), используйте числовые значения, а не их словесные представления.

var buttonNames = [ 'None', '1', '2', '3'];

У меня возникли проблемы с предоставлением встроенному StackSnippet разрешения на доступ к микрофону (вероятно, это связано с правилами междоменного доступа и песочницы), поэтому я поместил весь код в пользовательский скрипт. Он заменяет HTML страницы на ваш HTML. Щелкните по тексту документа, и начнется распознавание. (Откройте консоль браузера, чтобы увидеть, что он делает) Затем произнесите одно из названий кнопок. (Убедитесь, что Stack Overflow - или любой другой домен, на котором вы запускаете пользовательский скрипт, - имеет разрешение на прослушивание вашего микрофона)

Когда срабатывает обработчик onresult (когда вы перестаете говорить), определите последнее слово в расшифровке и посмотрите, соответствует ли оно какому-либо из buttonNames. Если это так, querySelectorAll - это кнопки в документе, а .click() - соответствующий индекс кнопок.

// ==UserScript==
// @name         Userscript Speech Recognition
// @namespace    CertainPerformance
// @version      1
// @match        https://stackoverflow.com/questions/51702275/click-button-using-javascript-speech-recognition-tampermonkey
// @grant        none
// ==/UserScript==

document.head.innerHTML = '';
document.body.innerHTML = `
    <div class = "radio-container" style = "height:1000px">
         <div class = "col-6">
          <button id = "radio0">None</button>
         </div>
        <div class = "col-6">
         <button id = "radio1">One</button>
        </div>
        <div class = "col-6">
         <button id = "radio2">Two</button>
        </div>
        <div class = "col-6">
         <button id = "radio3">Three +</button>
        </div>
      </div>
`;

document.addEventListener('click', ({ target }) => {
  if (!target.matches('button')) return;
  console.info('Click detected: ' + target.outerHTML);
});
var SpeechRecognition = SpeechRecognition || webkitSpeechRecognition
var SpeechGrammarList = SpeechGrammarList || webkitSpeechGrammarList
var SpeechRecognitionEvent = SpeechRecognitionEvent || webkitSpeechRecognitionEvent


var buttonNames = [ 'None', '1', '2', '3'];

var recognition = new SpeechRecognition();

document.body.onclick = function(e) {
  if (e.target.matches('button')) return;
  recognition.start();
  console.info('Listening');
}

recognition.onresult = function(event) {
  var last = event.results.length - 1;
  var speechText = event.results[last][0].transcript;
  console.info('Heard ' + speechText);
  const foundButtonIndex = buttonNames.findIndex(buttonName => buttonName === speechText);
  console.info(foundButtonIndex);
  if (foundButtonIndex !== -1) document.querySelectorAll('button')[foundButtonIndex].click();
}

recognition.onspeechend = function() {
  recognition.stop();
}

recognition.onnomatch = function(event) {
  console.info('Not recognized')
}

recognition.onerror = function(event) {
  console.info('Error ' + event.error);
}

Для более общего решения, когда кнопки могут иметь любой текст внутри, и вы хотите иметь возможность произносить текст кнопки и нажимать соответствующую кнопку, вы можете querySelectorAll все кнопки при загрузке страницы, сопоставить их с объектом с ключами, соответствующими их текстовое содержимое, а затем щелкните buttonObj[speechText], если он существует.

mehn, кажется, ты решил все проблемы, спасибо. Мне понадобится время, чтобы разобрать ваш код. Я вернусь к вам через несколько часов. Большое спасибо

Joseph 06.08.2018 10:50

Другие вопросы по теме