web-dev-qa-db-fra.com

Pourquoi document.addEventListener ('load', fonction) ne fonctionne-t-il pas dans un script greasemonkey?

Cela ne donne pas d'erreur, et je mets une console.log('loaded userscript wifi-autologin'), le console.log fonctionne, mais l'effet voulu du document.addEventListener ne se produit pas. Après un peu plus de débogage, en imprimant que addEventListener était appelé, j'ai découvert qu'il n'était pas appelé.

Source du script:

// ==UserScript==
// @name        wifi-autologin
// @namespace   lf-ns
// @description Hopefully autologins to a captive portal
// @include     *://1.1.1.1/*
// @version     1
// @run-at document-end
// ==/UserScript==

document.addEventListener('load', submitAction);
41

Apparemment, document.addEventListener() n'est pas fiable, et donc mon erreur. Utilisez plutôt window.addEventListener() avec les mêmes paramètres.

71

cela s'est encore produit vers le dernier trimestre de 2017. Greasemonkey tire trop tard. après que l'événement domcontentloaded ait déjà été déclenché.

que faire:

  • j'ai utilisé @run-at document-start au lieu de document-end
  • firefox mis à jour à 57.

à partir de: https://github.com/greasemonkey/greasemonkey/issues/2769

Même en tant que scénariste (privé), je ne comprends pas pourquoi mon script ne fonctionne pas.

Le problème le plus probable est que l'événement 'DOMContentLoaded' est déclenché avant l'exécution du script. Maintenant, avant de revenir et de dire que @ run-at document-start est défini, cette directive n'est pas totalement prise en charge pour le moment. En raison de la nature très asynchrone de WebExtensions, il y a peu de garantie quant à l'exécution de quelque chose. Quand FF59 roulera, nous aurons le 2663 qui vous aidera. En fait, cela va aider beaucoup de choses, le débogage aussi.

0
bh_earth0