2010-08-12 11 views
7

का उपयोग करके लोडिंग समाप्त कर ली है, तो मैं GreaseMonkey स्क्रिप्ट का उपयोग करके जीमेल में कुछ jQuery सामान जोड़ने की कोशिश कर रहा हूं। JQuery कार्यक्षमता जोड़ना ठीक काम करता है, लेकिन समस्या यह है कि जब मैं लोडिंग समाप्त कर लेता हूं तो मैं वास्तव में पता नहीं लगा सकता।पता लगाएं कि जीमेल ने jQuery और GreaseMonkey

यह मूलतः क्या होता है: मैं

  1. ताज़ा जीमेल
  2. लोड हो रहा है खिड़की
  3. जीएम स्क्रिप्ट 3 बार शुरू होता है शुरू होता है, लोड हो रहा है खिड़की के दौरान
  4. लोड हो रहा है विंडो में
  5. कुछ बदल जाता है
  6. जीएम स्क्रिप्ट एक और समय शुरू होता है
  7. पृष्ठ बदलता है
  8. ,210
  9. जीएम स्क्रिप्ट आखिरी बार
  10. Gmail दृश्य भार शुरू होता है और खत्म

इस बिंदु जावास्क्रिप्ट का एक समूह डोम कि शायद कुछ कार्यों कि AJAX का उपयोग बाकी लोड करने के लिए पर कॉल में लोड कर दिया गया है पर दृश्य का

मैं चरण 8 के बाद सामग्री को लोड करना चाहता हूं, जब सब कुछ लोड हो गया है।

क्या कोई जानता है कि यह कैसे करें/इसका पता लगाएं?

उत्तर

5

सबसे पहले, आप Google पर अपने gmail-greasemonkey एपीआई को ठीक करने के लिए चिल्ला सकते हैं - जो हर दिन और अधिक तोड़ने लगता है। विशेष रूप से, registerViewChangeCallback() एक समाधान की सुविधा प्रदान करेगा लेकिन ऐसा लगता है कि यह सही ढंग से काम करना बंद कर दिया है।

मुख्य दस्तावेज़ परिवर्तनों में देरी से आग लगने के लिए एक कामकाज होगा। निम्नलिखित कोड फ़ायरफ़ॉक्स पर मेरे लिए काम करने के लिए लगता है। इसे iFrame सामग्री के लिए tweaking की आवश्यकता हो सकती है।

// 
// ==UserScript== 
// @name   Fire on page finished (with AJAX mods) 
// @namespace  Gmail 
// @description  This script shows one way to wait for an AJAX-heavy page to load. 
// @include   http://mail.google.com/* 
// @include   https://mail.google.com/* 
// ==/UserScript== 
// 

if (window.top != window.self) //don't run on frames or iframes 
    return; 


var zGbl_PageChangedByAJAX_Timer = ''; 


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


function LocalMain() 
{ 
    if (typeof zGbl_PageChangedByAJAX_Timer == "number") 
    { 
     clearTimeout (zGbl_PageChangedByAJAX_Timer); 
     zGbl_PageChangedByAJAX_Timer = ''; 
    } 

    document.body.addEventListener ("DOMNodeInserted", PageBitHasLoaded, false); 
} 


function PageBitHasLoaded (zEvent) 
{ 
    if (typeof zGbl_PageChangedByAJAX_Timer == "number") 
    { 
     clearTimeout (zGbl_PageChangedByAJAX_Timer); 
     zGbl_PageChangedByAJAX_Timer = ''; 
    } 
    zGbl_PageChangedByAJAX_Timer  = setTimeout (function() {HandlePageChange(); }, 666); 
} 


function HandlePageChange() 
{ 
    removeEventListener ("DOMNodeInserted", PageBitHasLoaded, false); 

    alert ('Page has finished loading.'); 
} 
+0

अब तक काम करने लगता है! धन्यवाद। और हाँ, एपीआई एक बेहतर तरीका होगा। उम्मीद है कि वे उस दिन पुनरुत्थान करेंगे। – Alec