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?

21
demandé sur Brock Adams 2010-11-16 04:32:18

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.

35
répondu Brock Adams 2015-06-01 19:49:04

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

0
répondu Dr.Molle 2010-11-16 02:09:15