Печать объекта `event` внутри скрипта greasemonkey молча завершает выполнение, как я могу просмотреть` event`? - PullRequest
0 голосов
/ 09 декабря 2018

Вот мой сценарий (намеренно упрощенный):

// ==UserScript==
// @name            StackOverflowExample
// @include     https://stackoverflow.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 определен (просто нажмите любую клавишу, а затем «вверх»).Любые идеи?

Редактировать: кажется, я был неправ со второй частью (хотя я был так уверен, что я видел, что она работает на другом сайте ...)

Browser = firefox 63.0.3 (64-разрядная версия)

ОС = Ubuntu 18.04

GreaseMonkey = 4.7

1 Ответ

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...