Pregunta

Si crea un script de Greasemonkey con @include * e ir a un sitio como YouTube, se ejecuta la secuencia de comandos más de 20 veces cada vez que se actualiza. Esto es en Firefox, no está seguro acerca de Chrome.
¿Hay una manera de evitar esto?

¿Fue útil?

Solución

En primer lugar, es probable que no quiere que la secuencia de comandos para ejecutar en iFrames.
Puede bloquear que el uso de la Directiva @noframes que ahora trabaja en tanto Greasemonkey y Tampermonkey a partir de octubre de 2014.

En versiones anteriores, o para los motores de script que no son compatibles con @noframes, puede utilizar este código, justo después del bloque de metadatos:

if (window.top != window.self)  //don't run on frames or iframes
{
    //Optional: GM_log ('In frame');
    return;
}


En segundo lugar, se puede esperar y disparar su código de GM, una vez que, al cargar la página. Envolver todo en un main() y lo llaman en el caso load, así:

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

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


En tercer lugar, se puede excluir sitios o páginas mediante la adición de directivas // @exclude al bloque de metadatos.

En general, es mejor evitar las secuencias de comandos de GM universalmente incluidos, si es posible.

Otros métodos podrían establecer banderas o volver a cargar la página con los parámetros de URL. Estos se hacen tan complicado guardarlos como un último recurso.

Otros consejos

Por ejemplo, puede almacenar la ubicación dada en una variable persistente. Al cargar la página que tiene que comprobar, si la ubicación actual ya está almacenado en esta variable.

Si no es así, se establece la variable y ejecutar su función, si es así no hacen nada.

Cómo almacenar las variables persistentes: GM_setValue

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top