2012-05-04 13 views
5

मैं एक a Rally पृष्ठ पर लिंक में कुछ पाठ चालू करने के लिए एक Greasemonkey स्क्रिप्ट पर काम कर रहा हूँ। जब मैं पृष्ठ को फिर से लोड करता हूं तो स्क्रिप्ट ठीक केवल काम करता है। यदि मैं किसी भी तरीके से पृष्ठ पर नेविगेट करता हूं (लिंक, ब्राउज़र आगे/पीछे) स्क्रिप्ट नहीं चलती है, इस तथ्य के बावजूद कि Greasemonkey मेनू नीचे की तरफ मेरी स्क्रिप्ट दिखाता है, चेकमार्क के साथ।Greasemonkey स्क्रिप्ट केवल तब चलता है जब पृष्ठ पुनः लोड है

https://rally1.rallydev.com/#/4745909548/detail/userstory/6138899084/changesets 

मेरे मिलान नियम:

यहाँ एक उदाहरण यूआरएल है

/^https://.*\.rallydev\.com/.*/changesets$/ 

मैं अगर हैश एक समस्या खड़ी कर रहा है पता नहीं है, लेकिन सब कुछ ठीक है जब मैं फिर से लोड।

यह सुनिश्चित नहीं है कि यहां से कहाँ जाना है। किसी भी मदद की सराहना की है।

+1

यदि यह एक रीलोड पर काम करता है तो मुझे संदेह है कि मिलान मायने रखता है ... –

+0

सहमत हैं, मैं उस जानकारी को शामिल कर रहा था क्योंकि मुझे लगा कि कोई पूछेगा। :) – neilw

उत्तर

7

यह सुनिश्चित करना असंभव है कि क्या हो रहा है, क्योंकि लक्षित पृष्ठ वेतन-दीवार के पीछे हैं और उनके कथित "नि: शुल्क परीक्षण" तंत्र भाग को उड़ाते हैं।

यहाँ वर्तमान व्यवहार के कुछ संभावित कारण हैं:

  1. प्रारंभिक अनुरोध असुरक्षित (http) है, लेकिन एक सुरक्षित पृष्ठ (https) पर रीडायरेक्ट।
  2. पहला पृष्ठ लोड वास्तविक पृष्ठ पर किसी अन्य प्रकार का रीडायरेक्ट करता है।
  3. लक्ष्य सामग्री में है जो तुरंत लोड नहीं होती है।
  4. लक्षित सामग्री AJAXed-in है।
  5. कुछ विदेशी जो हमें पता लगाने के लिए वास्तविक पृष्ठ को देखने की आवश्यकता होगी।
  6. प्रारंभिक यूआरएल वास्तव में changesets में समाप्त नहीं होता है।

इसके अलावा, नियमित अभिव्यक्ति की बीच में / रों भागने की आदत में मिलता है। यह हमेशा जरूरी नहीं है, लेकिन अंत में यह आपको [सेंसर] में काट देगा यदि आप नहीं करते हैं। तो स्क्रिप्ट का उपयोग करना चाहिए:

// @include /^https:\/\/.*\.rallydev\.com\/.*\/changesets$/ 

शुरू करने के लिए है, लेकिन नीचे देखें।


एक समाधान के लिए चरण:

  1. http और अंतरिक्ष अनुगामी या URL में स्लेश अनुगामी की संभावना के लिए खाते में करने के लिए अपने @include बदलें। उपयोग करें:

    // @include /^https?:\/\/.*\.rallydev\.com\/.*\/changesets(?:\s|\/)*$/ 
    
  2. Firebug के साथ पृष्ठ की जांच करें। सामग्री AJAXed-in है? क्या यह में है? यदि हां, तो iframe यूआरएल क्या है, अगर कोई है?
  3. भी, AJAX और/या रीडायरेक्ट का पता लगाने के Firebug's Net panel और/या Wireshark का उपयोग करें।
  4. यदि संभव हो, तो हमें लॉगिन प्रमाण-पत्र प्रदान करें ताकि हम एक समस्याग्रस्त पृष्ठ देख सकें।
  5. स्नैपशॉट एक समस्याग्रस्त पृष्ठ (इसे फ़ायरफ़ॉक्स के माध्यम से सहेजें) और Pastebin.com में उस HTML और JS से लिंक करें।
  6. की तरह कोड का उपयोग पर विचार करें:

    if (window.top != window.self) { 
        //--- Don't run on/in frames or iframes. 
        return; 
    } 
    

    भी लागू हो, स्क्रिप्ट केवल में (या नहीं) iframes दिखाने के लिए।


समस्या AJAX देरी (या नई सामग्री की लोडिंग) के कारण होता है, कि the waitForKeyElements() utility का उपयोग करके के रूप में "Fire Greasemonkey script on AJAX request" में दिखाया गया है चारों ओर मिलता है।

+1

यह स्मारक रूप से सहायक था, बहुत बहुत धन्यवाद। यह एक AJAX समस्या थी, हालांकि शुरुआत में पृष्ठ पर लिंक कॉन्फ़िगर किए जाने के तरीके से मुझे बेवकूफ़ बना दिया गया था। मैंने waitForKeyElements() का उपयोग करने का प्रयास किया, पूरे डोमेन पर नियम लागू किया, और ऐसा लगता है कि यह काम कर रहा है। यह थोड़ा हेवीवेट है (इच्छा है कि मुझे jQuery लोड करने की आवश्यकता नहीं है), लेकिन यह काम करता है और विश्वसनीय लगता है। ढेरों धन्यवाद। – neilw

+1

आपका स्वागत है। मैंने एक बार 'WaitForKeyElements' बनाने के बारे में सोचा था जिसे jQuery की आवश्यकता नहीं थी, लेकिन मेरी स्क्रिप्ट के सबसे सरल लेकिन सभी jQuery का उपयोग करते हैं। यह हेवीवेट नहीं है, खासकर जब से जीएम आपकी स्थानीय मशीन से इसे चलाता है जब आप '@ आवश्यकता' निर्देश का उपयोग करते हैं। और jQuery की भयानक भलाई स्क्रिप्टिंग को इतना आसान बनाता है। –

+1

सभी शामिल लोगों के लिए बहुत बहुत धन्यवाद। मैं अमेज़ॅन की चेकआउट प्रक्रिया के साथ काम कर रहा हूं और मुझे पहले इसका एहसास नहीं हुआ, लेकिन वे AJAX प्रत्येक "पेज" लोड कर रहे हैं और 'window.location.pathname' के माध्यम से यूआरएल बदल रहे हैं। मैंने अपनी स्क्रिप्ट को प्रक्रिया में किसी भी पेज को शामिल करने के लिए अपडेट किया और आसानी से इसे 'waitForKeyElements' का उपयोग करने के लिए परिवर्तित कर दिया। यह एक 3 मिनट का समाधान है जो एक बड़े पैमाने पर डीबगिंग दुःस्वप्न होता। –

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