2008-09-16 17 views
19

मैं अपनी GreaseMonkey स्क्रिप्ट को विंडो पर फायरिंग से संशोधित करने की कोशिश कर रहा हूं। विंडो पर लोड करें। DOMContentLoaded, लेकिन यह घटना कभी नहीं आग लगती है।GreaseMonkey स्क्रिप्ट में "DOM Ready" ईवेंट को कैसे कार्यान्वित करें?

मैं फ़ायर्फ़ॉक्स 2.0.0.16/GreaseMonkey 0.8.20080609

This उपयोग कर रहा हूँ, पूर्ण स्क्रिप्ट है कि मैं संशोधित करने के लिए कोशिश कर रहा हूँ है बदल रहा है:

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

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

उत्तर

24
को

तो मैंने greasemonkey dom ready और first result को गुगल किया था, ऐसा लगता था कि greasemonkey स्क्रिप्ट वास्तव में "डोम तैयार" पर चल रही है, इसलिए आपको बस हटाने की आवश्यकता है ऑनलोड कॉल और सीधे स्क्रिप्ट चलाएं।

मैं window.addEventListener ("load", function() { और }, false); रैपिंग हटा दिया है और यह पूरी तरह से काम किया। यह अधिक इस तरह से अधिक प्रतिक्रियाशील है, पृष्ठ सीधे आपके स्क्रिप्ट के साथ दिखाई देता है और सभी अदृश्य प्रश्नों को हाइलाइट किया गया है, बिल्कुल कोई झिलमिलाहट नहीं है। और बहुत खुशी हुई .... हाँ।

10

ग्रीसमोन्की स्क्रिप्ट स्वयं को डोमकंटेंट लोडेड पर निष्पादित कर दिया जाता है, इसलिए लोड इवेंट हैंडलर जोड़ने के लिए अनावश्यक है - बस अपनी स्क्रिप्ट को जो कुछ भी करने की ज़रूरत है उसे करें।

http://wiki.greasespot.net/DOMContentLoaded

+0

Firefox 3.6 प्री-रिलीज़ का उपयोग करना, मैं जैसी Google खोज में क्षैतिज उन्मुख विज्ञापनों रंग करने के लिए एक सरल उपयोगकर्ता स्क्रिप्ट लिखने की कोशिश कर रहा था वे "गैसलैंड" खोजते समय मुझे गैस उद्योग प्रायोजित पृष्ठ पर ले जाने के लिए वास्तव में एक लिंक पर क्लिक करते थे) और यह काम नहीं करता था। मैंने फिर शीर्ष जवाब की कोशिश की: 'लोड' घटना के लिए addEventListener, और यह काम किया। –

1

@Sam: हाँ, मैं कोशिश कर रहा था एक ही:

// ==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) 
    } 

})(); 
संबंधित मुद्दे