Pregunta

Estoy tratando de modificar mi GreaseMonkey secuencia de comandos de activación en la ventana.onload de la ventana.DOMContentLoaded, pero este evento nunca incendios.

Estoy usando FireFox 2.0.0.16 / GreaseMonkey 0.8.20080609

Este es el guión que estoy tratando de modificar, cambiar:

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

a

window.addEventListener ("DOMContentLoaded", doStuff, false);
¿Fue útil?

Solución

Así que busqué en google greasemonkey dom listo y el primer resultado parecía decir que el script de greasemonkey realmente se está ejecutando en "DOM ready", usted sólo tiene que quitar el onload llamar y ejecutar la secuencia de comandos de inmediato.

He quitado el window.addEventListener ("load", function() { y }, false); envolver y funcionó perfectamente.Es mucho más sensible de esta manera, la página aparece en seguida con la secuencia de comandos que se le aplique y todos los invisibles preguntas de relieve, sin parpadeo en todos.Y hubo gran regocijo....sí.

Otros consejos

Los scripts de GreaseMonkey mismos son ejecutados en DOMContentLoaded, por lo que es necesario agregar un controlador de eventos de carga - acaba de tener su secuencia de comandos de hacer todo lo que se necesita de inmediato.

http://wiki.greasespot.net/DOMContentLoaded

@Sam:sí, yo estaba tratando de la misma:

// ==UserScript==
// @name           Stack Overflow highlight viewed questions
// @namespace      *
// @include        http://stackoverflow.com/questions
// @include        http://stackoverflow.com/questions?*
// @include        http://stackoverflow.com/questions
// @include        http://stackoverflow.com/questions?*
// @version        0.55 (DOM-Ready instead of onload)
// ==/UserScript==

(function() {

    // Customizable items
    // var fav_tags = ["python", "database", "mysql"];          // Your favorite tags
    const UNSEEN_BACK_COLOR = "rgb(225,210,210)";     // Backcolor for the question already seen
    const FAV_TAG_BACK_COLOR = "rgb(210,210,225)";  // Backcolor for the favorite tags

    // Internal to the DOM
    // const QUESTION_URL = "http:\/\/stackoverflow.com\/questions\/([0-9]+)\/";
    const QUESTION_URL = "http:\/\/stackoverflow.com\/questions\/([0-9]+)\/";
    const TAG_PREFIX = "show questions tagged ";

    const SEEN_MARK = "x";
    //

    var seen_q = [];
    var seen_q_str = "";

    var seen_q_str = GM_getValue ("seen_q", "");
    var seen_q = seen_q_str.split("|");

    var fav_tags_str = GM_getValue ("fav_tags", "")
    var fav_tags = fav_tags_str.split(" ")

    var already_run = false;

    GM_registerMenuCommand ("Set favorite tags", askTags);

    // window.addEventListener ("DOMContentLoaded", doStuff, false);
    if (! doStuff()) {
        window.addEventListener ("load", doStuff, false);
    }

    function doStuff() {

        var elements = window.document.getElementsByTagName('A');

        if (! elements || already_run) {
            return false;
        } else {
            already_run = true;
        }

        GM_log ("here");

        for (elem = 0; elem < elements.length; elem++) {
            if (elements[elem].href.match (QUESTION_URL)) {
                curr_q = RegExp.$1;

                // Already seen?
                if ((seen_q.length < curr_q) || (seen_q [curr_q] != SEEN_MARK)) {
                    elements[elem].style.backgroundColor = UNSEEN_BACK_COLOR;
                    seen_q [curr_q] = SEEN_MARK;
                }

                // Is a favorite tag?
                node = elements[elem].parentNode.parentNode;
                for (tag = 0; tag <= fav_tags.length; tag++) {
                    if (node.innerHTML.match ("'" + fav_tags[tag] + "'")) {
                        node.style.backgroundColor = FAV_TAG_BACK_COLOR;
                        break;
                    }
                }

                // return (0);
            }
        }

        seen_q_str = seen_q.join("|");
        GM_setValue ("seen_q", seen_q_str);

        return true;
    }


    function askTags() {
        fav_tags_str = prompt("Favorite tags (separated by spaces)", fav_tags_str);
        GM_setValue ("fav_tags", fav_tags_str)
    }

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