क्या एक चिकना स्क्रिप्ट पता चल सकता है कि दूसरे टैब में क्या लोड किया गया है?


1

मैं एक Greasemonkey स्क्रिप्ट लिखने की योजना बना रहा हूं, जो एक विशेष URL (@include या @match) पर चलेगी, लेकिन, मैं यह चाहूंगा कि यदि मैं एक ही URL के साथ एक या अधिक अतिरिक्त टैब खोलूं, तो Greasemonkey स्क्रिप्ट दूसरे (और आगे) डुप्लिकेट पृष्ठों पर नहीं चलेगी।

उदाहरण के लिए, मान लीजिए कि मेरे पास एक Greasemonkey स्क्रिप्ट है जो वेबपेज में "स्टाइल" में बदलाव करती है (या किसी अन्य तरीके से "modify" करता है) जब मैं "google.com" खोलता हूं। मैं "google.com" पर एक और टैब खोलने में सक्षम होना चाहता हूं जहां Greasemonkey स्क्रिप्ट नहीं चलेगी। या, अधिक सही ढंग से चलेगा, लेकिन यह पता लगाएगा कि यह पहले से ही चल रहा है और पहले टैब में पृष्ठ को संशोधित कर रहा है और फिर दूसरे टैब में "बाहर निकलें"। दूसरा टैब खुला रहेगा लेकिन स्क्रिप्ट से सिर्फ "अप्रभावित" है।

मैं नहीं जानता कि क्या एक ग्रीसीमोनी स्क्रिप्ट अन्य खोले गए टैब को "देख" सकता है, लेकिन अगर यह हो सकता है, तो मेरा पहला विचार यह जांचना था कि क्या एक अन्य टैब पहले से ही उस पृष्ठ पर लोड किया गया था, और फिर बाहर निकलने के लिए यदि यह पाया गया कि यह था

लेकिन यह उससे थोड़ा अधिक शामिल होना होगा क्योंकि:

  1. यदि पहला टैब बंद हो गया था और एक नया ("तीसरा") टैब उस URL पर खोला गया था, तो मैं चाहता हूं कि Greasemonkey स्क्रिप्ट चले और उस पृष्ठ को "संशोधित" करें क्योंकि यह पहले पृष्ठ पर होगा।
  2. इसी तरह, यदि मैं पहला टैब "रिफ्रेश" करता हूं (ग्रेसिमेक स्क्रिप्ट को संपादित करने के बाद, या किसी अन्य कारण से), तो मैं चाहता हूं कि ग्रीसेमनीकी स्क्रिप्ट को चलाएं और पुनः लोड किए गए पृष्ठ को "संशोधित" करें।

तो, ऐसा लगता है कि Greasemonkey स्क्रिप्ट या तो होगा:

  1. "मैच" खोजने के लिए एक दूसरे टैब के URL की जाँच करें, और फिर "Peek में उस टैब" को देखने के लिए कि क्या Greasemonkey स्क्रिप्ट "सक्रिय रूप से" उस पृष्ठ को संशोधित कर रहा था (शायद एक छिपा हुआ, खाली, जिसका नाम "DIV" या अन्य है तत्व)।
  2. टैब खोलने और बंद करने पर नज़र रखने के लिए "स्थानीय भंडारण" या "क्रॉस-टैब ग्लोबल (सुपरग्लोबल?) चर" के कुछ प्रकार का उपयोग करें।

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

आरंभ करने के लिए, मुझे यह जानने की आवश्यकता है कि क्या (और कैसे) एक ग्रेसीमेक स्क्रिप्ट:

  1. अन्य टैब को "देख" सकते हैं।
  2. अन्य टैब के URL (और शायद "शीर्षक" पाठ) पढ़ सकते हैं।
  3. दूसरे टैब में तत्वों के अस्तित्व की जाँच करें (और शायद पढ़ें लेकिन लिखें नहीं)।
  4. "स्थानीय (कंप्यूटर) स्टोरेज" प्रबंधित करें या "क्रॉस-टैब ग्लोबल वेरिएबल्स" प्रबंधित करें (यदि यह भी किया जा सकता है)।

जवाबों:


5

ग्रीसीमोनीक नहीं कर सकते:

  1. अन्य टैब देखें।
  2. अन्य टैब के URL की जाँच करें।
  3. अन्य टैब में DOM नोड्स / तत्वों की जाँच करें।

इसका कारण यह है कि ग्रीसेमेकी, टेम्परमॉन्की, आदि इन एपीआई को उपयोगकर्ताओं के लिए / के लिए उजागर नहीं करते हैं।
(पूर्ण ब्राउज़र एक्सटेंशन कर सकते हैं उन सभी चीजों को करें।)


चिकनाई कर सकते हैं:

  1. उपयोग कर स्क्रिप्ट उदाहरणों के बीच क्रॉस संवाद GM_setValue() डॉक्टर तथा GM_getValue() डॉक्टर
  2. कभी-कभी, आप भी उपयोग कर सकते हैं .postMessage()। ( उदाहरण )
    यह करेगा शायद यदि आप उपयोग करते हैं तो केवल आपके लिए काम करते हैं window.open नया टैब बनाने के लिए।
  3. चूँकि आप एक ही डोमेन पर हैं, आप भी इस्तेमाल कर सकते हैं localStorage या कुकीज़ पार संवाद करने के लिए।
  4. अंत में, यदि नया टैब खोला जाता है से मास्टर टैब, आप URL पैरामीटर (या हैश) के माध्यम से नए टैब पर संचार करते हैं। देख इस उपयोगकर्ता उस के एक उदाहरण के लिए। (ध्यान दें कि SEMC लिंक कैसे संभाला जाता है।)

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

सभी बिट्स और टुकड़ों को स्टैक ओवरफ्लो पर संबोधित किया गया है, लेकिन किसी भी एक प्रश्न में नहीं जिसे मैं याद करता हूं।

यदि आप संवाद करने के लिए चर (विधियों 1 या 3) का उपयोग करते हैं, तो सुनिश्चित करें कि कुछ ऐसा होना चाहिए beforeunload इवेंट हैंडलर मास्टर पेज बंद होने से पहले वेरिएबल्स को साफ़ करने के लिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.