2009-10-02 12 views
5

मैं एक जावास्क्रिप्ट विज़ नहीं हूं, लेकिन क्या एक एकल एम्बेड करने योग्य जावास्क्रिप्ट फ़ाइल बनाना संभव है जो सभी ब्राउज़रों के मानकों को अनुपालन करता है? सभी ज्ञात जावास्क्रिप्ट हैक्स के संग्रह की तरह जो प्रत्येक ब्राउज़र को कोड को सही तरीके से समझने के लिए मजबूर करता है?क्या एक जावास्क्रिप्ट लाइब्रेरी लिखना संभव है जो सभी ब्राउज़रों के मानकों को अनुरूप बनाता है?

उदाहरण के लिए, IE6 :hover छद्म वर्ग सीएसएस में लिंक के अलावा कुछ के लिए नहीं पहचानता है, लेकिन वह :hover के सभी संदर्भ पाता है और एक हैक कि IE6 बलों इसे सही करने के लिए लागू होता है, किसी JavaScript फ़ाइल वहां मौजूद है, मुझे करने के लिए अनुमति होवर कमांड का उपयोग करें जैसा मुझे करना चाहिए।

एक अविश्वसनीय समय (और इस प्रकार धन) है कि हर वेबमास्टर को इन सभी हैक्स सीखने पर खर्च करना पड़ता है। कल्पना करें कि एक ओपन सोर्स प्रोजेक्ट था, जहां सभी को करना है, कोड को एम्बेड करने वाले हेडर में एक पंक्ति जोड़ना है और फिर वे अपनी साइट प्रति स्वीकृत वेब मानकों (एक्सएचटीएमएल सख्त, CSS3) को कोड करने के लिए स्वतंत्र होंगे।

प्लस, यह वेब ब्राउज़र के मानकों का पालन करने या सभी जावास्क्रिप्ट कोड निष्पादित होने के कारण धीमे ब्राउज़र के साथ फंसने के लिए प्रोत्साहन प्रदान करेगा।

तो, क्या यह संभव है?

+7

मुझे लगता है कि IE6 के लिए जे एस बहुत बड़ी एक साइट में एम्बेड करने के लिए किया जाएगा। – LiraNuna

+2

http://code.google.com/p/ie7-js/ –

उत्तर

3

चेक बाहर jQuery यह करता है ब्राउज़र में जावास्क्रिप्ट

उन्हीं लाइनों explorercanvas साथ आईई ब्राउज़रों के लिए एचटीएमएल 5 कैनवस टैग के लिए समर्थन लाता है के मानकीकरण का एक अच्छा काम।

1

आप पूर्ण मानक अनुपालन नहीं प्राप्त कर सकते हैं, लेकिन आप कुछ ढांचे का उपयोग कर सकते हैं जो कुछ सबसे खराब उल्लंघनों को सुचारू बनाता है। आप reset style sheet नामक किसी चीज़ का भी उपयोग कर सकते हैं।

0

दरअसल आप कर सकते हैं, इस मुद्दे को संभालने के लिए कई पुस्तकालय हैं। उस समय की शुरुआत से, जावास्क्रिप्ट अनुपालन समस्या हमेशा डेवलपर्स के लिए एक समस्या थी और इस समस्या को पाने के लिए पुस्तकालयों को विकसित करने वाले अभिनव लोगों के लिए धन्यवाद ...

उनमें से एक और मेरा पसंदीदा JQuery है।

1

आईई के लिए एक लाइब्रेरी है जो इसे मानक-अनुरूप ब्राउज़र की तरह अधिक कार्य करने के लिए: Dean Edwards' IE7

+2

आईई 7-जेएस को उन दिनों में वापस नामित किया गया था जब आईई 6 नवीनतम उपलब्ध संस्करण था, और माइक्रोसॉफ्ट के पास इसे अपडेट करने की कोई योजना नहीं थी। अब आईई 8 बाहर है, नाम उलझन में है। –

+0

हाँ। उन्होंने संभावित रूप से नाम अपडेट करने के बारे में एक ब्लॉग पोस्ट पोस्ट किया। – ceejayoz

+0

यह? http://dean.edwards.name/weblog/2005/02/ie8/ –

1

सभी ज्ञात जावास्क्रिप्ट हैक्स कि कोड को ठीक से

आपके पास दो विकल्प व्याख्या करने के लिए प्रत्येक ब्राउज़र मजबूर का एक संग्रह की तरह: browser compatibility tables पढ़ सकते हैं और अपने आप को प्रत्येक अपवाद एक ब्राउज़र है जानने के लिए और एक बनाने के लिए, या उपलब्ध पुस्तकालयों का उपयोग करें।

यदि आप जावास्क्रिप्ट सुधार अबास्ट्रक्शन चाहते हैं, तो आप jQuery का उपयोग कर सकते हैं।

यदि आप एक सीएसएस सुधार अबास्ट्रक्शन चाहते हैं, तो आप /IE7/ देख सकते हैं।

मैं आमतौर पर जावास्क्रिप्ट द्वारा बनाए गए सीएसएस सुधारों का उपयोग करना पसंद नहीं करता हूं। यह मेरे कोड के लिए एक और जटिलता है, एक और लाइब्रेरी जो पहले से ही बग किए गए ब्राउज़र में बग डाल सकती है। मैं conditional statements यानी 6, यानी 7 और इस तरह के लिए अलग स्टाइलशीट बनाने के लिए पसंद करते हैं। यह दृष्टिकोण काम करता है और बहुत अधिक ओवरहेड उत्पन्न नहीं करता है।

संपादित करें: (मुझे पता है कि हमें अन्य ब्राउज़रों में समस्याएं हैं, लेकिन चूंकि आईई वहां का प्रमुख ब्राउज़र है और आमतौर पर हमें इसे काम करने के लिए वास्तव में अजीब हैक्स की आवश्यकता होती है, सीएसएस सशर्त बयान आईएमओ का एक अच्छा दृष्टिकोण है)।

4

प्लस, यह वेब ब्राउज़र के मानकों का पालन करने या सभी जावास्क्रिप्ट कोड निष्पादित होने के कारण धीमे ब्राउज़र के साथ फंसने के लिए प्रोत्साहन प्रदान करेगा।

अच्छा ... यह एक तरह का मुद्दा है। प्रत्येक असंगतता जेएस चाल का उपयोग करके बाहर निकाला जा सकता है, और अन्य उपयोग करने योग्य होने के लिए बहुत धीमे हो जाएंगे, या सूक्ष्म असंगतताओं को बनाए रखें। एक क्लासिक उदाहरण आईई 6 पर पीएनजी फाइलों में पारदर्शिता के लिए नकली समर्थन के लिए कई स्क्रिप्ट हैं: उन्होंने सरल परिस्थितियों के लिए काम किया, लेकिन अलग-अलग गिर गए या ऐसे पृष्ठों के लिए निषिद्ध रूप से धीमे हो गए जो ऐसी छवियों को रचनात्मक और व्यापक रूप से उपयोग करते थे।

कोई निःशुल्क भोजन नहीं है।

अन्य ने विशिष्ट परिस्थितियों को इंगित किया है जहां आप fake features that aren't supported, या abstract away differences पर लाइब्रेरी का उपयोग कर सकते हैं। मेरी सलाह है कि इस समस्या से निपटने के लिए टुकड़े टुकड़े करें: एक सभ्य ब्राउज़र के लिए अपना कोड लिखें, महत्वपूर्ण सुविधाओं के लिए समर्थित कार्यक्षमता के सामान्य सेट के लिए जितना संभव हो सके स्वयं को प्रतिबंधित करें। फिर विफल होने वाले ब्राउज़र को पैच करने के लिए हैक को लाएं, जिससे आप कार्यक्षमता छोड़ सकें या पुराने/कम ब्राउज़र पर संभव होने पर शानदार तरीके से गिरावट कर सकें।

यह अपेक्षाकृत आसान नहीं है। यदि यह इतना आसान था, तो आपको इसके लिए भुगतान नहीं मिल रहा था ... ;-)

0

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

पोस्ट-नेटस्केप, आप जावास्क्रिप्ट में भाषा के मूल में लगभग सभी सुविधाओं को लागू कर सकते हैं। उदाहरण के लिए, मैंने 100% जावास्क्रिप्ट कोड में ऐरे ऑब्जेक्ट के सभी तरीकों को कोड किया।

http://openjsan.org/doc/j/jh/jhuni/StandardLibrary/1.81/index.html

आप यहाँ सरणी के अपने कार्यान्वयन देख सकते हैं यदि आप लिंक पर जाएं और फिर सरणी के लिए नीचे जाने के लिए और फिर "स्रोत।"


क्या आप में से अधिकांश शायद करने के लिए डोम लागू कर रहा है बात कर रहे हैं अपने आप को वस्तुओं, जो बहुत अधिक समस्याग्रस्त है। आप, सभी आधुनिक ब्राउज़र में कैनवास टैग लागू कर सकते हैं लेकिन VML उपयोग करके, आप Internet Explorer में किसी गाड़ी/मुश्किल से काम कर प्रदर्शन मिल जाएगा क्योंकि VML मार्कअप जो कैनवास टैग लागू के लिए एक अच्छा प्रारूप नहीं है ...

http://code.google.com/p/explorercanvas/

फ्लैश/Silverlight: आप कैनवास टैग लागू कर सकते हैं और यह बहुत अच्छी तरह से काम करेगा इनमें से किसी का प्रयोग करके आप ध्वनि लागू कर सकते हैं। हालांकि, यदि उपयोगकर्ता के पास कोई ब्राउज़र प्लगइन्स नहीं है तो आप ऐसा कुछ भी नहीं कर सकते हैं।

http://www.schillmania.com/projects/soundmanager2/

डोम चीजें: डोम के मुद्दे पर, आप इस तरह के QEvent के मामले में अपनी खुद की घटना वस्तु को लागू करने से डोम से दूर सार, या यहाँ तक की तरह अपने खुद के नोड वस्तु को लागू कर सकते हैं YAHOO.util.Element के मामले में, हालांकि, इन्हें आमतौर पर मानक एपीआई में कुछ सूक्ष्म परिवर्तन होते हैं, इसलिए लोग आमतौर पर मानक से दूर हो रहे हैं, और पुस्तकालयों के सैकड़ों मामले हैं जो दूर हैं।

http://code.google.com/p/qevent/

यह शायद अपने प्रश्न का सबसे अच्छा जवाब है। यह ब्राउज़र को यथासंभव मानक-अनुरूप के रूप में बनाता है।

http://dean.edwards.name/weblog/2007/03/yet-another/

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