Question

Si vous créez un script Greasemonkey avec @include * et allez sur un site comme youtube, il exécute le script 20+ fois chaque fois que vous rafraîchir. Ceci est sur Firefox, pas sûr de Chrome.
Y at-il un moyen d'empêcher cela?

Était-ce utile?

La solution

D'abord, vous ne voulez probablement pas le script à exécuter dans iFrames.
Vous pouvez bloquer que l'utilisation de la directive @noframes qui travaille maintenant dans les deux Greasemonkey et Tampermonkey d'Octobre 2014.

Pour les versions plus anciennes, ou pour les moteurs de script qui ne prennent pas en charge @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;
}


En second lieu, vous pouvez attendre et tirer votre code GM, une fois, la charge de page. Tout envelopper dans un main() et l'appeler sur l'événement load, comme suit:

window.addEventListener ("load", LocalMain, false);

function LocalMain () {
    // Your code goes here.
}

Troisièmement, vous pouvez exclure les sites ou pages en ajoutant des directives // @exclude au bloc de métadonnées.

Dans l'ensemble, il est préférable d'éviter universellement inclus les scripts GM, si possible.

D'autres méthodes peuvent définir des indicateurs ou recharger la page avec les paramètres URL. Ceux-ci deviennent si les sauver délicate en dernier recours.

Autres conseils

Vous pouvez par exemple stocker l'emplacement donné dans une variable persistante. Sur chargement de la page, vous devez vérifier, si l'emplacement actuel est déjà enregistré dans cette variable.

Dans le cas contraire, vous définissez la variable et exécutez votre fonction, si oui, ne rien faire.

Comment stocker des variables persistantes: GM_setValue

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top