उपयोगकर्ता स्क्रिप्ट: क्रॉस-ब्राउज़र, क्रॉस-डोमेन

HabrAjax उपयोगकर्ता स्क्रिप्ट के विकास ने नए कार्यों के लिए क्रॉस-ब्राउज़र समर्थन के साथ अपनी अगली समस्याओं पर काबू पा लिया और मुख्य रूप से उपयोगकर्ता स्क्रिप्ट और उनके क्रॉस-डोमेन एक्सेस से संबंधित विभिन्न मुद्दों पर लेखों की एक आकाशगंगा (7 टुकड़े अभी तक प्रकाशित नहीं) बनाए। ये सभी लेख गैर-तुच्छ हैं, इंटरनेट पर उनके विषय आंशिक रूप से कवर किए गए हैं, और कुछ ब्राउज़र बग्स के विवरण में भी कवर नहीं किए गए हैं (या लेखक विदेशी भाषा समाधान नहीं जानता है)। लेखों को एक अनियंत्रित क्रम में रखना होगा, क्योंकि उन्हें किसी भी तरह से व्यवस्थित करने का कोई कारण नहीं है - प्रत्येक विषय से केवल दूसरे से संबंधित है। अब मैं भविष्य में क्या चर्चा की जाएगी, इस विचार को जोड़ने के लिए, लेखों की घोषणाओं को लिंक के बिना दूंगा। कार्यान्वयन HabrAjax में है, लेकिन वहाँ बहुत सारे अनुप्रयोग कोड हैं, प्रदर्शन के लिए एक अच्छा उदाहरण नहीं है। इसलिए, प्रत्येक लेख के लिए जहां तक ​​संभव हो, अधिक अनुकूलित उदाहरणों के साथ कोड होंगे।

क्रॉस-ब्राउज़र फिक्स विचार


उपयोगकर्ताओं के लिए डेवलपर्स उपयोगकर्ता स्क्रिप्ट (या ऐड-ऑन) के साथ काम करने के लिए स्थापना की अधिकतम आसानी सुनिश्चित करना चाहते थे, सरल था - फ़ाइल ले लो और एक क्लिक के साथ इंस्टॉल करें; और भी बेहतर, सभी क्रॉस-ब्राउज़र मतभेदों को एक साझा फ़ाइल में फैक्टर किया जाना चाहिए। ऐड-ऑन (नॉन-क्रॉस-ब्राउज़र) बस यही करते हैं - उपयोगकर्ता को केवल "इंस्टॉल" कहने की आवश्यकता है - और फिर उसे वह मिलता है जो वह बहुत मुश्किल के बिना चाहता है। इसलिए, ऐड-ऑन इतने लोकप्रिय हैं, हालांकि उन्हें एक आम उपयोगकर्ता स्क्रिप्ट से उत्पन्न करने के लिए, आपको एक जटिल क्लिंकर लिखना होगा।

उपयोगकर्ता स्क्रिप्ट के लिए, अक्सर ब्राउज़र-निर्भर कोड लिखना आवश्यक होता है - लेआउट में अंतर को दूर करने और इंस्टॉलेशन सुविधाओं को ध्यान में रखने के लिए। फिर भी, इसे आसान बनाने का विचार एक उपयोगकर्ता स्क्रिप्ट बनाने के लिए कहता है जो स्वचालित रूप से स्थापना की सुविधाओं में अंतर को ध्यान में रखता है। पहली चीज़ जो आपको निपटानी है वह है स्क्रिप्ट की ब्राउज़र स्थापना और मेटाडेटा की उनकी समझ। क्रॉस-डोमेन इंटरैक्शन में बहुत अधिक चिंताएं हैं। विभिन्न ब्राउज़रों में उपयोगकर्ता स्क्रिप्ट के साथ काम करते समय, क्रॉस-साइट डेटा एक्सचेंज के दौरान कुछ ब्राउज़र बग दिखाई देते हैं।

हमारी डेटा विनिमय आवश्यकताओं को इतना सीमित नहीं किया जाएगा, जैसा कि आमतौर पर स्वीकार किया जाता है। आमतौर पर (ओपेरा के लिए) वे मानते हैं कि हम एक स्क्रिप्ट को किसी अन्य डोमेन पर स्क्रिप्ट में लिख सकते हैं, और संपूर्ण कार्य एम्बेडेड स्क्रिप्ट में इसे निष्पादित करना है। अक्सर हम किसी विदेशी डोमेन पर डेटा नहीं बदल सकते हैं, और उन्हें प्राप्त करना हमारा काम है। डेटा पुनर्प्राप्त करने की आवश्यकता है:
1) मनमाना पाठ, जिसे जेएस स्क्रिप्ट द्वारा फंसाया जा सकता है और जेएस फाइल के रूप में स्थानांतरित किया जा सकता है (उपयोगकर्ता स्क्रिप्ट में उन्हें पैक करने के लिए);
2) आम तौर पर किसी भी चीज़ के साथ फ्रेम करने की क्षमता के बिना किसी अन्य फ़ाइल से मनमाना पाठ डेटा;
3) किसी भी JSON हैश - किसी अन्य डोमेन में।

पहला मामला तब होता है जब आपको स्क्रिप्ट में उपयोगकर्ता स्क्रिप्ट मेटाडेटा को पढ़ने की आवश्यकता होती है या यदि आप JS स्टाइलिंग में एन्कोडिंग के बिना CSS शैलियाँ लिखना चाहते हैं। अभी तक कोई क्रॉस डोमेन नहीं है, लेकिन कार्य पूरी तरह से तुच्छ नहीं है यदि हम एक सिंगल क्रॉस-ब्राउज़र व्यू प्राप्त करना चाहते हैं (सामान्य तौर पर, इसे हल नहीं किया जा सकता है - फ़ायरफ़ॉक्स में फ़ंक्शंस की कमी होती है, और GreaseMonkey में पेश किए गए "xml" प्रकार, जेएस भाषा के साथ वाक्य-विन्यास में असंगत है - दूसरे शब्दों में, किसी भी प्रकार से एलियन टाइप नहीं किया जा सकता है) क्रॉस-ब्राउज़र संगतता)। हमें अर्ध-समाधान मिलते हैं - GreaseMonkey के बजाय मेटाडेटा और स्क्रिप्टिश के मामले के लिए एक क्रॉस-ब्राउज़र दृश्य, या JS की क्षमताओं से परे फ़ायरफ़ॉक्स ब्राउज़र के लिए 2 वर्णों के लिए फ़ाइल को थोड़ा मोड़ने की आवश्यकता है - फिर न केवल मेटाडेटा पढ़ा जाता है, बल्कि *user.js फ़ाइल में भी मनमाना डेटा होता है। यह, निश्चित रूप से, बुरा है, लेकिन उपयोगकर्ता-स्क्रिप्ट संगतता की वास्तविकताएं हैं। समस्या और संभावित समाधान को " जेएस में बहु-पंक्ति डेटा पढ़ना " लेख में विस्तार से वर्णित किया गया है। यह उपयोगकर्ता स्क्रिप्ट्स से आगे निकल जाता है, लेकिन उपयोगकर्ता स्क्रिप्ट में यह उनमें है, कि समाधान का एक वास्तविक मौका है।

ध्यान दें कि जब हम डेटा और एक स्क्रिप्ट को एक स्क्रिप्ट फ़ाइल (उपयोगकर्ता स्क्रिप्ट या सरल स्क्रिप्ट) में पैक करने का प्रयास करते हैं, तो ये बेकार की समस्याएं उत्पन्न होती हैं। यदि आप 2 फ़ाइलों का उपयोग करते हैं, तो अब कोई समस्या नहीं है, क्योंकि हम 2 फ़ाइल से डेटा को पाठ या HTML के रूप में पढ़ सकते हैं (HTML टिप्पणी में लगभग मनमाना पाठ रखें), और पहले में केवल स्क्रिप्ट। हालांकि, एकल-फ़ाइल समाधान उपयोगकर्ता के साथ काम करने का एक अच्छा तरीका है: उसे एक फ़ाइल प्रदान की जाती है, जिसे आपको "इंस्टॉल" करने की आवश्यकता होती है। सच है, हम इस तरह के एक ट्रिफ़ल के बारे में थोड़ा भूल जाते हैं कि केवल क्रोम उपयोगकर्ता स्क्रिप्ट को मूल रूप से स्थापित कर सकता है; फ़ायरफ़ॉक्स के लिए, आपको GreaseMonkey या Scriptish ऐड-ऑन की आवश्यकता है, ओपेरा के लिए, ब्राउज़र सेटिंग्स में साइट के लिए सेटिंग्स लिखना (इसका मतलब है, अगर नया कंप्यूटर, तो नए कार्यों की एक श्रृंखला के साथ नई चिंताएं, और न केवल "फ़ाइल स्थापित करें")। उसके पास एक ऐडऑन है, जैसे ग्रीज़मोंकी, एक बहुत ही आदिम अवस्था में है - उसे स्क्रिप्ट को एडऑन के इनपुट क्षेत्र में कॉपी करने की आवश्यकता है, मेटाडेटा पर ध्यान नहीं दिया जाता है, इसलिए हम इसका उल्लेख नहीं करते हैं। अंत में, सफारी को एड-ऑन (निंजाकिट) की भी आवश्यकता होती है और एड-ऑन एडिटर पर उपयोगकर्ता स्क्रिप्ट फ़ाइल की बॉडी की प्रतिलिपि बनाएँ। यही है, सिंगल-फाइल + क्रॉस-ब्राउज़र संगतता पहले से ही बहुत तंग है।

डेटा विनिमय के दूसरे और तीसरे मामले डेवलपर के लिए दुर्गम एक विदेशी डोमेन के एक डोमेन में एक उपयोगकर्ता स्क्रिप्ट को पेश करके हल किए जाते हैं। यहाँ समाधान 2 में से 2 ब्राउज़रों में जटिल है। लेख " उपयोगकर्ता स्क्रिप्ट में क्रॉस-डोमेन एक्सचेंज के लिए क्रोमियम बग को दरकिनार करते हैं ", " ओपेरा में उपयोगकर्ता स्क्रिप्ट में क्रॉस-डोमेन डेटा एक्सचेंज " बताते हैं कि उन्हें दूर किया जा सकता है।

ओपेरा के लिए उपयोगकर्ता स्क्रिप्ट के बजाय Addon


हमने उन्हें चेतावनी दी कि हम कुछ भी नहीं रोकेंगे, यदि केवल उपयोगकर्ता ही ठीक है? वे चेतावनी दी थी। उन्होंने क्या किया? स्वचालन की संभावना के बिना बहुत सारी सेटिंग्स। अब हमारे पास सबसे मुश्किल हिट करने का नैतिक अधिकार है - ओपेरा के लिए ऐड-ऑन जनरेट करने के लिए एक एल्गोरिथ्म के साथ आने के लिए, एक यूजर स्क्रिप्ट की जगह। क्योंकि एक ऐडोन के निर्माण को स्वचालित करना संभव है, लेकिन ओपेरा में निर्मित उपयोगकर्ता स्क्रिप्ट का निर्माण नहीं है। हमें एकल "इंस्टॉल" बटन और यहां तक ​​कि ओपेरा वेबसाइट पर एक जगह के रूप में वांछित समाधान मिलेगा। यह कैसे करना है - " उपयोगकर्ता स्क्रिप्ट से ओपेरा के लिए Addon " लेख में।

वही, वैसे, सफारी के लिए। NinjaKit है - एक एडऑन जो GreaseMonkey की क्षमताओं के करीब है, लेकिन किसी कारण से आपको स्क्रिप्ट पाठ को मैन्युअल रूप से कॉपी करने की आवश्यकता है, और यह क्रॉस-डोमेन अनुरोध GM_XMLHTTPRequest का पूरी तरह से समर्थन नहीं करता है। यह सब किसी तरह से तुच्छ है; यह ज्ञात नहीं है कि क्या इसका समर्थन किया जाएगा। एक ही समय में उपयोगकर्ता स्क्रिप्ट आइकन की समस्या को हल करके ऐड-ऑन में चलना आसान है, सामान्य रूप से फ़ायरफ़ॉक्स में हल किया गया है और कहीं और (एड-ऑन के अलावा) हल नहीं किया गया है: आइकन मेटाडेटा निर्देश समर्थित है, और स्क्रिप्ट में आइकन केवल फ़ायरफ़ॉक्स में काम करते हैं। इसे सभी नियमों के सर्वोच्च धारक की दृष्टि में डेवलपर का शीर्षक प्राप्त करने के लिए एक छोटी सी खोज की आवश्यकता होती है, इसलिए सब कुछ एक साथ लेख में वर्णित है " उपयोगकर्ता स्क्रिप्ट से एडऑन फॉर सफारी ।"

क्रॉस-ब्राउज़र ऐड-ऑन


चूंकि ओपेरा और सफारी और मुझे अपने स्वयं के ऐड-ऑन लिखने की आवश्यकता होती है, जो उपयोगकर्ता स्क्रिप्ट से कोड में बहुत भिन्न होते हैं (इस अर्थ में नहीं कि यह इकट्ठा करना मुश्किल है, लेकिन बाइट्स में एक मजबूत अंतर), एक और पागल ख्याल आता है - आखिरकार, सभी ब्राउज़रों के सभी ऐड-जनरल सामान्य सिद्धांतों के अनुसार बनाए जाते हैं - इसके विस्तार और बहुत समान कार्यों के साथ कई फ़ाइलों की विशेषता वाला ज़िप संग्रह। लेकिन क्या हम एक सामान्य क्रॉस-ब्राउज़र संग्रह बना सकते हैं जिसमें विस्तार को फिर से लिखना पर्याप्त है? यदि फ़ाइल नामों में कोई विरोध नहीं है, तो काम संभव है - 4 अलंकृत ट्रैक्स एक बार फिर से विलय हो जाएंगे, और कार्यान्वयन सुविधाएँ एक एकल संग्रह को सहन करेंगे, जिसमें अनावश्यक ब्राउज़र-निर्भर सेटिंग्स शामिल हैं। एक्सटेंशन का नाम बदलने के मैनुअल ऑपरेशन द्वारा संग्रह कलेक्टर को फिर से सरल बनाया जाएगा।

अपने उपयोगकर्ता स्क्रिप्ट के साथ किसी और के बगीचे में प्रवेश करें


क्रॉस-डोमेन मेटाडेटा अनुरोध इतने बुरे नहीं हैं। यह 2 ब्राउज़रों में आसानी से हल हो जाता है, ओपेरा में यह मुश्किल है। लेकिन ओपेरा में निर्णय आसान लगेगा यदि आप पूरी तरह से दुर्भाग्य से परिचित हो जाते हैं - तृतीय-पक्ष साइटों के फ्रेम से क्रॉस-डोमेन डेटा विनिमय प्रदान करते हैं। मेटाडेटा पढ़ना सिर्फ एक विशेष मामला होगा और ओपेरा के लिए एक ही एक्सचेंज तकनीक का उपयोग करके एक बच्चे की मस्ती (दुर्भाग्य से, वे शायद पहले से स्क्रिप्ट वाले उपयोगकर्ता स्क्रिप्ट में कुछ प्रकार के बग हैं)। "संपूर्ण दुर्भाग्य" कैसे हल किया जाता है इसका वर्णन " उपयोगकर्ता स्क्रिप्ट में क्रॉस-डोमेन एक्सचेंज के लिए क्रोमियम बग को दरकिनार करना " है, और किसी अन्य के बगीचे से स्वादिष्ट फल प्राप्त करने के लिए समाधान का उपयोग कैसे करें, जिनके मालिक एपीआई के माध्यम से उन्हें साझा करने की कोई जल्दी नहीं हैं, लेख में " Google प्लस बटन का कॉम्पैक्ट आकार " "। और वास्तव में, क्यों 70 पिक्सेल क्षैतिज रूप से खर्च करते हैं, "पसंद" की संख्या पर डेटा की कमी से पीड़ित होते हैं, जब सबसे अधिक 24 पिक्सेल "पसंद" की संख्या के 1-2-3 अंकों के लिए पर्याप्त होते हैं? हमें अपने पृष्ठों के डिजाइन में "बात करने" के लिए +1 बटन की आवश्यकता क्यों है? उपयोगकर्ता स्क्रिप्ट इन सभी समस्याओं को हल करेगी - इसे स्थापित करने के लिए उपयोगकर्ता पर निर्भर है। ओपेरा का दर्शक फिर से बढ़ जाता है और सेटिंग्स पर एक टन के निर्देशों से घबरा जाता है - हुर्रे, यह कुछ भी नहीं है कि हमने सीखा कि पिछले लेखों में ऐड-ऑन में स्क्रिप्ट कैसे पैक करें।

यह नवीनतम संस्करण में किए गए उपयोगकर्ता स्क्रिप्ट के लिए सबसे शानदार अतिरिक्त है, यह चित्रण के लायक है। उपयोगकर्ता स्क्रिप्ट के कारण Google+ बटन असामान्य रूप से कॉम्पैक्ट हैं।
(चित्र 1) ( I- Pictures , imageshack पर )

लेख आम तौर पर तैयार होते हैं; परीक्षण के मामलों पर काम नहीं किया गया है, केवल हब्राजैक्स स्क्रिप्ट को छोड़कर, जिसके आधार पर ये सभी समस्याएं सामने आईं। इसलिए, उन्हें आने वाले सप्ताह या दो में प्रकाशित किया जाएगा क्योंकि वे सभी सहायक सामग्रियों की तत्परता से अवगत हो जाते हैं। उदाहरण के लिए, मैं क्रोमियम बग के लिए समाधान का वर्णन करने के लिए उपयोग के लिए तैयार सबसे कॉम्पैक्ट और स्वच्छ उपयोगकर्ता स्क्रिप्ट जोड़ना चाहूंगा (2.5 साल है; कुछ इसे "सुरक्षा सुविधा" मानते हैं)।

लेकिन HabrAjax के बारे में क्या और क्रॉस-डोमेन कार्यान्वयन के लिए कहाँ देखना है?


संक्षेप में, संस्करण 0.81 में उन्होंने निम्नलिखित विशेषताएं हासिल कीं:
* 2-3 क्लिक में नहीं बल्कि एक में उन्हें पाने के लिए व्यक्तिगत पेजों के लिए सीधे लिंक

(अंजीर। 2)

* स्क्रिप्ट अपडेट के लिए जाँच करें - समय-समय पर, दिन में एक बार से अधिक नहीं (अवधि निर्धारित होती है) स्क्रिप्ट की जाँच करता है। यदि संस्करण मामूली है तो परेशान न करें। (क्रॉस-डोमेन टेक्नोलॉजीज)

(अंजीर। 3)

* मेटाडेटा से सुविधाएँ दिखा रहा है - यह बताता है कि इसमें एक नया दिखाई दिया, साथ ही सत्यापन के दौरान सर्वर पर एक नया। (क्रॉस-डोमेन टेक्नोलॉजीज)

(अंजीर। 4)

* मेटाडेटा में एक स्टाइलिश आइकन (अंत में शांत) (वहां यह सही शीर्ष है)।
* चेकबॉक्स के चारों ओर ये फ्रेम नवीनतम बदली हुई सुविधाओं की याद दिलाते हैं।
* अनुकूलन अधिकतम। जबरन कट के साथ चित्रों की ऊंचाई (डिफ़ॉल्ट 120 ZenComment के साथ)। एनोटेशन ऊंचाई (अधिकतम) दोगुनी है।
* एक पत्र लिखें, एक उद्धरण या लेखक के नाम को उजागर करना - आपको उन्हें मैन्युअल रूप से कॉपी करने की आवश्यकता नहीं है (यह "उद्धरण सुधारक" सेटिंग द्वारा सक्षम है)।
* मेल पूर्वावलोकन बटन।
* कॉम्पैक्ट Google प्लस बटन (क्रॉस-डोमेन तकनीक)
* ज़ेनकॉम की शैलियों में छोटे बदलाव - उनका संस्करण (2.16) भी हबरजैक्स में बनाया गया है। स्क्रिप्ट के साथ उपयोग करना सुविधाजनक है, लेकिन सब कुछ किया गया है ताकि शैली और स्क्रिप्ट स्वतंत्र हों। आवश्यक (सख्त आवश्यक न्यूनतम) शैलियों को लिपियों में लिखा जाता है और बहुत सारी (250) रेखाओं पर कब्जा कर लेता है।

हां, और स्क्रिप्ट के बारे में - उन लोगों के लिए जो पहले से ही इसका उपयोग करते हैं - कृपया सर्वेक्षण में भाग लें - " किस ब्राउज़र में आप हब्राजैक्स स्क्रिप्ट का उपयोग करते हैं? " (एकाधिक विकल्प संभव हैं)। यह ब्राउज़रों और ओएस की स्क्रिप्ट क्या काम करता है, इसकी एक तस्वीर देखने में मदद करेगा। अगर 2 अलग-अलग कंप्यूटर हैं - तो एक पोल में (अलग-अलग जगहों से) 2 वोट लिखें। फ़ायरफ़ॉक्स के लिए ऐड-ऑन भी मायने रखता है - यह पता चला कि अधिक लचीला ऐड-ऑन स्क्रिप्टिश है, क्योंकि यह आपको मेटाडेटा निर्देशों के क्रॉस-ब्राउजर मल्टी-लाइन टेक्स्ट लिखने की अनुमति देता है (यह " जेएस में मल्टी-लाइन डेटा पढ़ना " लेख में कवर किया जाएगा)।

UPD 18:30: उपयोगकर्ता नाम के आसपास गलत लिंक के साथ फिक्स्ड जुनूनी बग। ओपेरा, एफएक्स, क्रोम में परीक्षण किया गया। (ओपेरा डोम पढ़ने के लिए सबसे अतिसंवेदनशील निकला, इसमें उपयोगकर्ता की अपंजीकृतता के कीड़े दिखाई दिए।) कृपया अपडेट करें जो डाउनलोड करने में कामयाब रहे। इसी समय, मेटाडेटा को पढ़ने और नए संस्करण में जो किया गया है उसे दिखाने का काम दिखाई देगा (यदि आप "अपडेट के लिए जांच करें " लिंक पर क्लिक करते हैं।
UPD2: हालाँकि, कई क्रोम उपयोगकर्ता पोल दिखाना शुरू कर रहे हैं।

Source: https://habr.com/ru/post/In139724/


All Articles