5 votes

Comment exécuter du code sur le DOM ready dans Greasemonkey 4 ?

Avec la mise à jour vers Firefox 57 et Greasemonkey 4, un certain nombre de mes userscripts se sont cassés. Dans certains scripts j'ai utilisé :

document.addEventListener('DOMContentLoaded', doStuff, false);

Cela ne fonctionne plus avec Greasemonkey. Quelle est la bonne façon d'ajouter un DOMContentLoaded maintenant ?

P.S. J'ai vérifié qu'au moment de l'enregistrement de l'événement, DOM n'est toujours pas prêt.

2voto

Je ne sais toujours pas quelle est la méthode recommandée pour exécuter du code sur le DOM ready dans Greasemonkey 4, mais après avoir changé :

document.addEventListener('DOMContentLoaded', doStuff, false);

à :

window.addEventListener('load', doStuff, false);

mon script fonctionne à nouveau. Je viens de commencer à tester d'autres méthodes basées sur ceci répondre J'ai donc décidé de mettre à jour mon site web, car j'ai remarqué que mes scripts d'utilisateur basés sur jQuery fonctionnent toujours (du moins la partie "DOM ready").

Cette réponse est assez évidente, mais au moment où j'ai écrit la question, je n'étais pas sûr de suivre les changements dans Greasemonkey (en lisant tous les trucs asynchrones) et je m'attendais à ce que DOMContentLoaded de travailler.

2voto

Xufox Points 3719

J'ai rencontré un problème similaire après la mise à jour de GreaseMonkey vers la version 4, mais j'ai utilisé

addEventListener("DOMContentLoaded", function(){
  // …
});

au lieu de cela.

Lorsque j'ai essayé de corriger mes user-scripts, j'ai d'abord commenté ce wrapper et j'ai mis un

// @run-at document-end

dans le bloc de métadonnées . De cette façon, je me suis assuré que le DOM était prêt et que le code qui se trouvait à l'origine dans le fichier DOMContentLoaded s'est exécuté correctement.

Cela a fonctionné, mais pour deux de mes user-scripts, j'ai eu besoin d'exécuter JavaScript, avant que la page scripts n'ait été exécutée. et exécuter d'autres codes lorsque le DOM est prêt. Il s'avère que maintenant vous besoin pour mettre

// @run-at document-start

dans le bloc de métadonnées afin que le DOMContentLoaded pour qu'il fonctionne sur votre window (ou document ).

Dans les versions précédentes de GreaseMonkey, il suffisait d'omettre ce point pour que le système fonctionne correctement.

Toutefois, selon la GreaseSpot Wiki , document-start n'est pas garantie de fonctionner dans GreaseMonkey 4.0, peut-être en raison d'une exécution asynchrone ou de fonctionnalités manquantes dans la réécriture WebExtensions de l'add-on.

En outre, document.readyState sera "loading" con document-start mais "interactive" con document-end ou non // @run-at du tout.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X