2010-11-16 23 views
21

यदि आप @include * के साथ Greasemonkey स्क्रिप्ट बनाते हैं और यूट्यूब जैसी साइट पर जाते हैं, तो यह हर बार रीफ्रेश होने पर 20+ बार स्क्रिप्ट चलाता है। यह फ़ायरफ़ॉक्स पर है, क्रोम के बारे में निश्चित नहीं है।
क्या इसे रोकने के लिए कोई तरीका है?प्रति पेज लोड केवल एक बार Greasemonkey स्क्रिप्ट चलाएं?

उत्तर

35

सबसे पहले, आप शायद स्क्रिप्ट को iFrames में चलाने के लिए नहीं चाहते हैं।
आप ब्लॉक कर सकते हैं कि the @noframes directive जो अब दोनों Greasemonkey और अक्टूबर के रूप में Tampermonkey में काम करता है, 2014

का उपयोग कर पुराने संस्करणों के लिए, या स्क्रिप्ट इंजन है कि @noframes का समर्थन नहीं करते के लिए, तो आप इस कोड, बस के बाद का उपयोग कर सकते मेटाडाटा ब्लॉक:

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


दूसरे, आप प्रतीक्षा करें और अपने जीएम कोड आग, एक बार, पृष्ठ लोड पर कर सकते हैं। एक main() में सब कुछ लपेटें और load घटना पर इसे कहते है, इसलिए जैसे:

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

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


तीसरा, आप मेटाडाटा ब्लॉक करने के लिए // @exclude निर्देशों जोड़कर साइट या पृष्ठों को हटा सकते हैं।

कुल मिलाकर, यदि संभव हो तो सार्वभौमिक रूप से शामिल जीएम स्क्रिप्ट से बचने के लिए सबसे अच्छा है।

अन्य विधियां झंडे सेट कर सकती हैं या यूआरएल पैरामीटर के साथ पेज को फिर से लोड कर सकती हैं। ये मुश्किल हो जाते हैं इसलिए उन्हें अंतिम उपाय के रूप में सहेजें।

+1

सिर्फ यूट्यूब की जाँच की, वहाँ बहुत कम iframes का था। मेरा सुझाव 'GM_log (location.href) 'और संकीर्ण @ शामिल है। –

+1

यह मेरी समस्या हल हो गया। धन्यवाद! – Joren

+2

@ जोरेन: आपका स्वागत है। मदद करने में खुशी। –

0

उदाहरण के लिए आप दिए गए स्थान को एक स्थिर चर में संग्रहीत कर सकते हैं। पृष्ठ लोड पर आपको जांचना होगा, यदि वर्तमान स्थान पहले से ही इस चर में संग्रहीत है।

यदि नहीं, तो आप चर सेट करते हैं और अपना कार्य चलाते हैं, यदि हां कुछ भी नहीं है।

कैसे लगातार चर स्टोर करने के लिए: GM_setValue

संबंधित मुद्दे