Печать объекта `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)) синтаксическая ошибка во втором блоке кода

Также:

  1. console.log({e}) беден, потому что он бесполезно затеняет e внутри фиктивного объекта.
  2. Скобки в (e) лишние.
  3. Форматирование кода, пробелы и отступы могут помочь вам быстрее обнаруживать ошибки и облегчают попытки чтения / поддержки вашего кода в целом.
  4. keyCode 40 - это стрелка вниз, а не стрелка вверх.
  5. Привыкайте использовать точки с запятой; это избавит от ненужных ошибок и царапин на голове.

Итак, первый блок кода должен быть:

// ==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. Вы сэкономите часы разочарований, и ваши сценарии будут более надежными и более переносимыми.

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