Exécuter un script Greasemonkey une seule fois par chargement de page?
Si vous créez un script Greasemonkey avec @include *
et aller sur un site comme youtube, il exécute le script plus de 20 fois à chaque fois que vous vous rafraîchissez. C'est sur Firefox, pas sûr pour le Chrome.
Est-il un moyen pour éviter cela?
2 réponses
D'abord, vous ne voulez probablement pas que le script s'exécute dans iFrames.
Vous pouvez bloquer cela en utilisant @noframes
la directive qui fonctionne désormais à la fois en Greasemonkey et Tampermonkey à partir d'octobre 2014.
pour les versions plus anciennes, ou pour les moteurs de script qui ne supportent pas @noframes
, vous pouvez utiliser ce code, juste après le bloc de métadonnées:
if (window.top != window.self) //don't run on frames or iframes
{
//Optional: GM_log ('In frame');
return;
}
Deuxièmement, vous pouvez attendre et lancer votre code GM, une fois, sur le chargement de la page. Tout envelopper dans un main()
et l'appeler sur le load
événement, comme suit:
window.addEventListener ("load", LocalMain, false);
function LocalMain () {
// Your code goes here.
}
Troisièmement, vous pouvez exclure des sites ou des pages en ajoutant // @exclude
directives du bloc de métadonnées.
dans l'ensemble, il est préférable d'éviter les scripts GM universellement inclus, si possible.
D'autres méthodes peuvent définir des drapeaux ou recharger la page avec des paramètres D'URL. Ceux-ci deviennent délicats, alors sauvez-les en dernier recours.
vous pouvez par exemple stocker l'emplacement donné dans une variable persistante. Lors du chargement de la page, vous devez vérifier si l'emplacement actuel est déjà stocké dans cette variable.
si ce n'est pas le cas, vous définissez la variable et lancez votre fonction, si oui, ne faites rien.
comment stocker les variables persistantes:GM_setValue