Печать объекта `event` внутри скрипта greasemonkey молча завершает выполнение, как я могу просмотреть`event`?
Вот мой сценарий (намеренно упрощенный):
// ==UserScript==
// @name StackruExample
// @include https://stackru.com/*
// @version 1
// @grant none
// ==/UserScript==
document.addEventListener('keydown', (e) => {
console.log('I print before the "e"')
conosel.log({e})
console.log('I print after the "e"')
})
Когда этот скрипт загружается на мою страницу (Переполнение стека), я вижу, что "Я печатаю до" e "" выводится на консоль, но я не вижу ни "e", ни "Я печатаю после" e " 'войдите. Почему это?
Я пытался добавить такие вещи, как e.preventDefault()
и это не имело значения.
Загадочная вещь в том, что подобные вещи внутри слушателя событий все еще работают:
document.addEventListener('keydown', (e) => {
if(e.keyCode !== 40)){
console.log('you pressed some random key')
} else {
console.log('you pressed the "UP" arrow key')
}
})
Итак e
объект определен (просто нажмите любую клавишу, а затем "вверх"). Есть идеи?
Редактировать: кажется, я был неправ со второй частью, (хотя я был настолько уверен, что видел, как это работает на другом сайте...)
Браузер = Firefox 63.0.3 (64-разрядная версия)
ОС = Ubuntu 18.04
GreaseMonkey = 4,7
1 ответ
Greasemonkey 4+ не имеет смысла, и сама команда GM рекомендует не использовать его.
Если бы вы установили скрипт с помощью Tampermonkey (возможно, и Violentmonkey), вы бы увидели синтаксические ошибки на консоли. (А также в окне редактора Tampermonkey, если вы его использовали.)
Обратите внимание, что Greasemonkey 4+ на самом деле не потерпел неудачу. Он просто скрывал сообщения об ошибках в "браузерной консоли" Firefox (Ctrl + Shift + J), где большинство людей не знают и не думают искать их.
Очевидно, что conosel
ошибка (строка 11 исходного кодового блока).
Точно так же, if(e.keyCode !== 40))
синтаксическая ошибка во втором блоке кода
Также:
console.log({e})
беден, потому что он бесполезно затеняетe
внутри фиктивного объекта.- Скобки в
(e)
лишние. - Форматирование кода, пробелы и отступы могут помочь вам быстрее обнаруживать ошибки и облегчают попытки чтения / поддержки вашего кода в целом.
keyCode
40 - это стрелка вниз, а не стрелка вверх.- Привыкайте использовать точки с запятой; это избавит от ненужных ошибок и царапин на голове.
Итак, первый блок кода должен быть:
// ==UserScript==
// @name StackruExample
// @match https://stackru.com/*
// @version 1
// @grant none
// ==/UserScript==
document.addEventListener ('keydown', e => {
console.log ('I print before the "e"');
console.log ("e: ", e);
console.log ('I print after the "e"');
} );
И второе:
document.addEventListener ('keydown', e => {
if (e.keyCode !== 38) {
console.log ('you pressed some random key');
}
else {
console.log ('you pressed the "UP" arrow key');
}
} );
И используйте Tampermonkey и / или Violentmonkey, а не Greasemonkey. Вы сэкономите часы разочарований, и ваши сценарии будут более надежными и более переносимыми.