कैसे पता लगाया जाए कि जावास्क्रिप्ट अक्षम है?


659

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

क्या किसी को जावास्क्रिप्ट को अक्षम करने के लिए कुछ छोटे / सरल तरीकों का पता है? मेरा इरादा चेतावनी देना है कि जेएस सक्षम होने के बिना साइट ठीक से काम नहीं कर सकती है।

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


आप इस जानकारी के साथ क्या करना चाहते हैं? यह आपके द्वारा दिए गए उत्तर को बदल सकता है - उदाहरण के लिए प्रगतिशील वृद्धि को आमतौर पर जावास्क्रिप्ट को अक्षम करने का पता लगाने की कोशिश करने और उस पर आधारित विशिष्ट कार्रवाई करने के लिए इष्ट होना चाहिए।
जॉनी बुकानन

प्रगतिशील संवर्द्धन वही है जिसकी मुझे तलाश है। मैं चाहता हूं कि ओटी उन्हें वैकल्पिक सामग्री को पुनर्निर्देशित करने में सक्षम हो जो जेएस सक्षम या सक्षम ब्राउज़र की अनुपस्थिति में ठीक से काम करेगी।
मीकज

1
@expiredninja निकोलस ज़कस के इस पोस्ट के बारे में 2% कहते हैं, हालांकि यह एक साल से अधिक पुराना है।
सलीडीहसीरहैक

सबसे आसान तरीका गैर-जावास्क्रिप्ट साइट को दिखाने के लिए noscript का उपयोग करना है, और किसी javascript पर निर्भर तत्वों को शैली प्रदर्शन को संशोधित करने के लिए जावास्क्रिप्ट का उपयोग करना है।
Myforwik

जवाबों:


286

मुझे लगता है कि आप यह तय करने की कोशिश कर रहे हैं कि जावास्क्रिप्ट-संवर्धित सामग्री वितरित करें या नहीं। सबसे अच्छा कार्यान्वयन सफाई से नीचा दिखाते हैं, ताकि साइट अभी भी जावास्क्रिप्ट के बिना संचालित हो। मैं यह भी मानता हूं कि आप एक अस्पष्टीकृत कारण के लिए तत्व का उपयोग करने के बजाय सर्वर-साइड का पता <noscript>लगाते हैं।

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


129
गैर-जावास्क्रिप्ट सामग्री को निर्दिष्ट करने के लिए <noscript> IS सबसे अधिक अर्थपूर्ण सटीक तरीका है - और फिर यह पता लगाना कि यदि जावास्क्रिप्ट अक्षम है, तो पता लगाएँ कि क्या यह सक्षम है। तो "आपको मेरी साइट को ठीक से उपयोग करने के लिए जावास्क्रिप्ट की आवश्यकता है" संदेश को डिफ़ॉल्ट रूप से दिखाएं, लेकिन इसे तुरंत जावास्क्रिप्ट पर एक जावास्क्रिप्ट फ़ंक्शन के साथ छिपाएं।
मैट लोहकैंप

58
@matt lohkamp: या यहां तक ​​कि संदेश को डिफ़ॉल्ट रूप से छिपाएं, और unhide के <style>अंदर एक ब्लॉक लगाएं <noscript>(यदि जेएस सक्षम है तो वहां कोई रिफ्लो नहीं)। हैरानी की बात है, यह सभी आधुनिक ब्राउज़रों में काम करता है, और यहां तक ​​कि IE6 में
पिस्कॉर ने भवन को छोड़ दिया

7
@matt - मैं कुछ समय के लिए ऐसा कर रहा था, लेकिन उपयोगकर्ताओं को भ्रमित करने वाले धीमे कनेक्शन पर यह संदेश कुछ समय तक रहता है। मैं यहां एक अलग समाधान की तलाश में हूं। @Piskvor - शीर्ष लेख में <noscript> टैग मान्य नहीं होगा, और शरीर में एक <शैली> टैग मान्य नहीं होगा।
बेन

20
... सिवाय इसके कि आप मान्यता से क्यों चिंतित हैं? क्या आप केवल मान्य करने के लिए मान्य कर रहे हैं? यह "सही" नहीं हो सकता है लेकिन अगर यह काम करता है और इसे पूरा करता है "हुड के नीचे थोड़ी गंदगी के साथ" क्या मुद्दा है? चिंता मत करो, मैं न्याय नहीं करूंगा ;-)
केआईएफ

4
यह मान्य रहता है यदि आप केवल दिए गए तत्वों में <noscript> टैग (जैसे <noscript> <div style = "color: red;"> blahblah </ div> </ noscript> या gg के समान शैली विशेषता का उपयोग करते हैं)। । लेकिन यह भी मान्य रहता है यदि आप <शैली> को सामान्य रूप से शीर्ष लेख में रखते हैं, तो कुछ .noscript (या समान) श्रेणी के तत्वों की शैली को परिभाषित करते हुए, और शरीर में <noscript> टैग के भीतर, आप बस दिए गए तत्वों को देते हैं। पहले से परिभाषित .noscript वर्ग, इस तरह: <noscript> <div class = "noscript"> blahblah </ div> </ noscript>
Sk8erPeter

360

मैं अपना .02 यहां जोड़ना चाहूंगा। यह 100% बुलेटप्रूफ नहीं है, लेकिन मुझे लगता है कि यह काफी अच्छा है।

समस्या, मेरे लिए, "इस साइट को जावास्क्रिप्ट के बिना इतने अच्छे तरीके से काम नहीं करने" के पसंदीदा उदाहरण के साथ, संदेश यह है कि आपको यह सुनिश्चित करने की आवश्यकता है कि आपकी साइट जावास्क्रिप्ट के बिना ठीक काम करती है। और एक बार जब आप उस सड़क को शुरू कर देते हैं, तो आप महसूस करना शुरू कर देते हैं कि साइट को बुलेटप्रूफ होना चाहिए और जेएस बंद हो गया, और यह अतिरिक्त काम का एक बड़ा हिस्सा है।

तो, जो आप वास्तव में चाहते हैं, वह एक पृष्ठ पर "पुनर्निर्देशन" है जो कहता है कि "जेएस चालू करें, मूर्खतापूर्ण"। लेकिन, ज़ाहिर है, आप मज़बूती से मेटा रीडायरेक्ट नहीं कर सकते। तो, यहाँ सुझाव है:

<noscript>
    <style type="text/css">
        .pagecontainer {display:none;}
    </style>
    <div class="noscriptmsg">
    You don't have javascript enabled.  Good luck with that.
    </div>
</noscript>

... जहां आपकी साइट की सभी सामग्री "पेजकॉनटेनर" श्रेणी के एक div के साथ लिपटी हुई है। Noscript टैग के अंदर सीएसएस तब आपके सभी पेज कंटेंट को छिपा देगा, और इसके बजाय आप जो "कोई JS" संदेश दिखाना चाहते हैं। यह वास्तव में Gmail क्या करता है ... और यदि यह Google के लिए पर्याप्त है, तो यह मेरी छोटी साइट के लिए पर्याप्त है।


12
@ जल्द ही google.com को मान्य करने का प्रयास करें? सत्यापन केवल यह निर्धारित करता है कि दस्तावेज़ पत्रक के कितने करीब है, यह किसी भी तरह से पृष्ठ की उपयोगिता को प्रभावित नहीं करता है।
JKirchartz

71
@JonasGeiregat यदि आपका वेब ऐप बनाया गया था और आवश्यकता है - जावास्क्रिप्ट कार्य करने के लिए, तो उपयोगकर्ता को जावास्क्रिप्ट की आवश्यकता के लिए मजबूर करने में क्या गलत है? मैं यह टिप्पणी अक्सर सुनता हूं, फिर भी यह केवल सबसे सरल साइटों के लिए मान्य है। जेएस के बिना फेसबुक का प्रयास करें और देखें कि क्या होता है। यदि आपका ऐप जावास्क्रिप्ट के लिए बनाया गया था, तो 99% उपयोगकर्ताओं को वैसे भी सक्षम करने की आवश्यकता के साथ क्या गलत है?
ली बेन्सन

19
@ इसे कील पर मारो, आप केवल उपयोगकर्ता के लिए इतना कुछ कर सकते हैं इससे पहले कि आप जो समर्थन करेंगे उस पर रेखा खींच दें। हम सभी उपयोगकर्ताओं से एक इंटरनेट सक्षम डिवाइस की उम्मीद करते हैं, क्या मुझे अपनी साइट के एक पेपर संस्करण को उन लोगों के लिए भी लागू करना चाहिए जो इंटरनेट का उपयोग करने से इनकार करते हैं?
कोलर्स

14
@ कॉलेज, मैंने मार्च 2012 में उस टिप्पणी को वापस कर दिया, और मैं तर्क दूंगा कि यह आज दोगुना सच है। तब से, हमारे पास Meteor, Angular.Js, Famo.us, और अद्भुत पुस्तकालयों का एक टन है जो सभी जावास्क्रिप्ट को भी शुरू करने की आवश्यकता है । मुझे आश्चर्य है कि जो उपयोगकर्ता जेएस को अक्षम करने का विकल्प चुनते हैं, वे वास्तव में हासिल करने की कोशिश कर रहे हैं ... स्पष्ट रूप से, वे हम में से बाकी के रूप में एक ही वेब पर सर्फिंग नहीं कर रहे हैं, और कोई कारण नहीं है कि एक कंपनी को अपनी वेबसाइट को तनिष्ठा के लिए स्केल करने की आवश्यकता नहीं होनी चाहिए। जिद्दी उपयोगकर्ताओं के उप-सेट ...
ली बेन्सन

6
हाँ, और मुझे आश्चर्य है कि मैं आपके उत्तर को क्यों नहीं बढ़ा सकता, क्योंकि मैं अपने जेएस को सक्रिय करना भूल गया था :-)) मुझे पसंद है और आपके समाधान को लागू करता है! धन्यवाद!
गरवानी

198

noscript ब्लॉक को निष्पादित किया जाता है जब जावास्क्रिप्ट अक्षम होता है, और आमतौर पर वैकल्पिक सामग्री को प्रदर्शित करने के लिए उपयोग किया जाता है जो आपने जावास्क्रिप्ट में उत्पन्न किया है, उदा

<script type="javascript">
    ... construction of ajaxy-link,  setting of "js-enabled" cookie flag, etc..
</script>
<noscript>
    <a href="next_page.php?nojs=1">Next Page</a>
</noscript>

बिना js वाले उपयोगकर्ताओं को next_pageलिंक मिल जाएगा - आप यहां पैरामीटर जोड़ सकते हैं ताकि आप अगले पृष्ठ पर जान सकें कि वे JS / गैर-JS लिंक के माध्यम से आए हैं या JS के माध्यम से कुकी सेट करने का प्रयास करते हैं, जिसका अभाव JS को दर्शाता है अक्षम है। ये दोनों उदाहरण काफी तुच्छ हैं और हेरफेर करने के लिए खुले हैं, लेकिन आपको यह विचार मिलता है।

यदि आप विशुद्ध रूप से सांख्यिकीय विचार चाहते हैं कि आपके कितने उपयोगकर्ताओं के पास जावास्क्रिप्ट अक्षम है, तो आप कुछ ऐसा कर सकते हैं:

<noscript>
    <img src="no_js.gif" alt="Javascript not enabled" />
</noscript>

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

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


7
यह बहुत प्रभावी नहीं है। उदाहरण के लिए, यह किसी को भी केवल-पाठ ब्राउज़र के साथ नहीं गिना जाएगा, जिसमें सामान्य रूप से जावास्क्रिप्ट समर्थन नहीं है। बहुत कम से कम, आपको उस छवि के लिए कैशिंग अक्षम करना चाहिए।
जिम

3
क्या ब्रॉज़ेरे जो जेएस का समर्थन नहीं करते हैं, वे केवल नोटोस्क्रिप्ट टैग को अनदेखा नहीं करते हैं और छवि दिखाते हैं?
LKM

1
@ एलकेएम: वे कैसे लिखे जाते हैं, इस पर निर्भर करता है, सबसे अधिक संभावना है, इसलिए आप इसे 1x1px डॉट करेंगे। यह विकल्प मुख्य रूप से उपयोग पैटर्न सर्वर-साइड पर नज़र रखने के लिए है, इसलिए यह अभी भी ठीक होगा, क्योंकि यह जावास्क्रिप्ट क्षमता के बिना एक उपयोगकर्ता द्वारा ट्रिगर किया गया है।
कॉनरॉय

ध्यान दें कि वर्तमान में IE8 के साथ एक बग है और यदि आप इसे शैली करते हैं, तो noscript टैग ... positioniseverything.net/explorer.html
alex

2
इसके अलावा, आप उस छवि को सर्वर-साइड स्क्रिप्ट के रूप में देख सकते हैं, माइम-प्रकार सेट कर सकते हैं, और उपयोग कर सकते हैं कि उपयोगकर्ता के बारे में कुछ जानकारी लॉग इन करें या कुकी को ड्रॉप करें ... px.sklar.com/code.html/id=256
JKirchartz

46

यह वही है जो मेरे लिए काम करता है: यह एक आगंतुक को पुनर्निर्देशित करता है यदि जावास्क्रिप्ट अक्षम है

<noscript><meta http-equiv="refresh" content="0; url=whatyouwant.html" /></noscript>

6
यह अमान्य है। noscript तत्वों में मेटा तत्व नहीं हो सकते। मुझे विश्वास नहीं होगा कि यह सभी ब्राउज़रों में मज़बूती से काम करने के लिए होगा (भविष्य के ब्राउज़र जिनमें आप वर्तमान में परीक्षण नहीं कर सकते हैं सहित), क्योंकि वे विभिन्न तरीकों से त्रुटि सुधार कर सकते हैं।
क्वेंटिन

15
यह अमान्य हो सकता है, लेकिन फेसबुक के कोड को देखें, यह <head> भाग में उसी समाधान का उपयोग करता है - जिसका अर्थ यह नहीं है कि यह एक बहुत अच्छा समाधान है, क्योंकि फेसबुक का कोड एक मान्य कोड से बहुत दूर है, लेकिन इसका मतलब यह हो सकता है कि कई उपयोगकर्ताओं के ब्राउज़र पर काम करता है, जो एक महत्वपूर्ण पहलू हो सकता है। लेकिन यह सच है कि यह वास्तव में सुझाव नहीं दिया गया है। यह उनका कोड है: <noscript> <मेटा http-equiv = ताज़ा सामग्री = "0; URL = / / संदेश / /? _ Fb_noscript = 1" /> </ noscript>
Sk8erPeter 19:11

IE9 (कम से कम) में एक सेटिंग है "META REFRESH"। मुझे नहीं लगता कि कई लोग इसे बंद कर रहे हैं, लेकिन संभवतः उन लोगों को जो जावास्क्रिप्ट पसंद नहीं करते हैं, लेकिन अगर आप 100% चाहते हैं, तो यह ऐसा नहीं है।
जेन्सन-बटन-इवेंट

यह HTML5 में मान्य है।
Naszta

1
यह लिंक को तबाह कर देता है जब लिंकडिन पर साझा करने की कोशिश कर रहा है, हमने कठिन रास्ता खोज लिया ... यह एक अच्छा विचार नहीं है। चूंकि
लिंकेन

44

यदि आपका उपयोग मामला यह है कि आपके पास एक फॉर्म है (उदाहरण के लिए, एक लॉगिन फ़ॉर्म) और आपके सर्वर-साइड स्क्रिप्ट को यह जानने की आवश्यकता है कि क्या उपयोगकर्ता ने जावास्क्रिप्ट सक्षम किया है, तो आप ऐसा कुछ कर सकते हैं:

<form onsubmit="this.js_enabled.value=1;return true;">
    <input type="hidden" name="js_enabled" value="0">
    <input type="submit" value="go">
</form>

इससे फ़ॉर्म सबमिट करने से पहले js_enabled का मान 1 में बदल जाएगा। यदि आपके सर्वर-साइड स्क्रिप्ट को 0 मिलता है, तो कोई JS नहीं। अगर इसे 1, JS मिलता है!


44

मेरा सुझाव है कि आप विनीत जावास्क्रिप्ट लिखकर दूसरे रास्ते पर जाएँ।

जावास्क्रिप्ट अक्षम वाले उपयोगकर्ताओं के लिए अपने प्रोजेक्ट कार्य की विशेषताएं बनाएं, और जब आप काम पूरा कर लें, तो अपने जावास्क्रिप्ट UI-संवर्द्धन को लागू करें।

https://en.wikipedia.org/wiki/Unobtrusive_JavaScript


145
ज़िंदगी बहुत छोटी है। यह 2012
यारिन

25
"जीवन बहुत छोटा है। यह 2012 है - जावास्क्रिप्ट सक्षम करें या घर जाएं!" कोई जेएस की स्थिति में प्रदर्शित करने के लिए एकदम सही संदेश है। केवल आपको यह बताने के लिए लॉग इन किया गया है कि @Yarin

5
मैं भी सिर्फ यह कहने के लिए लॉग इन किया है कि भयानक है! @Yarin। मैं एक छोटी सी साइट बना रहा हूं जो आम तौर पर सार्वजनिक नहीं होगी (एक इंट्रानेट की तरह लेकिन दोस्तों के लिए एक प्रोजेक्ट पर काम करने के लिए)। मैं इसे एसपीए बना रहा हूं और कमबैक के लिए परेशान नहीं कर रहा हूं। विनीत जावास्क्रिप्ट लगभग आधा काम का बोझ है जो मैं एसपीए अवधारणा में डाल रहा हूं। आधुनिक जावास्क्रिप्ट पुस्तकालयों जैसे कि नॉकआउट, जेकरी, अन्य के साथ, हमें बस यह स्वीकार करना होगा कि हर साइट को आसानी से "विनीत" नहीं बनाया जा सकता है। जावास्क्रिप्ट वेब का भविष्य है।
लासॉम्ब्रा

5
@ यारिन मैं जीने के लिए PHP / JS एप्स का निर्माण करता हूं जिन्हें मैंने कभी कमियां नहीं बताईं ... अगर यह किसी ऐसे व्यक्ति के लिए काम नहीं करता है जो वे मुझसे संपर्क करते हैं और मैं उन्हें अतीत में रहने से रोकने और जेएस को सक्षम करने के लिए कहता हूं।
सैम

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

35

<noscript>यहां तक ​​कि आवश्यक नहीं है, और XHTML में समर्थित नहीं का उल्लेख नहीं है

काम करने का उदाहरण :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
<html>
<head>
    <title>My website</title>
    <style>
      #site {
          display: none;
      }
    </style>
    <script src="http://code.jquery.com/jquery-latest.min.js "></script>
    <script>
      $(document).ready(function() {
          $("#noJS").hide();
          $("#site").show();
      });
    </script>
</head>
<body>
    <div id="noJS">Please enable JavaScript...</div>
    <div id="site">JavaScript dependent content here...</div>
</body>
</html>

इस उदाहरण में, यदि जावास्क्रिप्ट सक्षम है, तो आप साइट देखते हैं। यदि नहीं, तो आप "कृपया जावास्क्रिप्ट सक्षम करें" संदेश देखें। यदि जावास्क्रिप्ट सक्षम है, तो परीक्षण करने का सबसे अच्छा तरीका केवल जावास्क्रिप्ट का उपयोग करना है! यदि यह काम करता है, तो यह सक्षम है, यदि नहीं, तो यह नहीं है ...


1
हा, एक्सएचटीएमएल। वे दिन थे ... चीजें बहुत बदल गई हैं: developer.mozilla.org/en-US/docs/Web/HTML/Element/noscript
Stephan Weinhold

jquery का उपयोग क्यों करें ...
लुइस विल्विसेनियो

@StephanWeinhold, JSF XHTML का उपयोग करता है।
Arash

34

शरीर पर एक .no-js वर्ग का उपयोग करें और .no-js मूल वर्ग के आधार पर गैर-जावास्क्रिप्ट शैली बनाएं। यदि जावास्क्रिप्ट अक्षम किया गया है, तो आपको सभी गैर जावास्क्रिप्ट शैली मिलेंगी, यदि JS समर्थन है तो .no-js वर्ग को हमेशा की तरह आप सभी शैलियों को बदल दिया जाएगा।

 document.body.className = document.body.className.replace("no-js","js");

एचटीएमएल 5 बॉयलरप्लेट http://html5boilerplate.com/ में उपयोग की जाने वाली ट्रिक आधुनिकता के माध्यम से लेकिन आप कक्षाओं को बदलने के लिए जावास्क्रिप्ट की एक पंक्ति का उपयोग कर सकते हैं

noscript टैग ठीक है लेकिन आपके html में अतिरिक्त सामान क्यों है जब इसे css के साथ किया जा सकता है


5
किसी .nojsवर्ग का उल्लेख करने से पहले यह विश्वास नहीं कर सकता था ! यह सबसे सहज दृष्टिकोणों में से एक है और noscriptशर्म की बात है।
मूसा

15

बस थोड़ा कठिन लेकिन (हेयरबो ने मुझे यह विचार दिया)

सीएसएस:

.pagecontainer {
  display: none;
}

जे एस:

function load() {
  document.getElementById('noscriptmsg').style.display = "none";
  document.getElementById('load').style.display = "block";
  /* rest of js*/
}

HTML:

<body onload="load();">

  <div class="pagecontainer" id="load">
    Page loading....
  </div>
  <div id="noscriptmsg">
    You don't have javascript enabled. Good luck with that.
  </div>

</body>

किसी भी मामले में सही काम करेगा? भले ही नोस्क्रिप्ट टैग असमर्थित हो (केवल कुछ सीएसएस आवश्यक) किसी को भी एक गैर सीएसएस समाधान पता है?


13

छिपे हुए फ़ील्ड का मान सेट करने के लिए आप एक साधारण JS स्निपेट का उपयोग कर सकते हैं। जब आप पोस्ट करते हैं तो आपको पता चलता है कि JS सक्षम था या नहीं

या आप एक पॉपअप विंडो खोलने की कोशिश कर सकते हैं जिसे आप तेजी से बंद करते हैं (लेकिन यह दिखाई दे सकता है)।

इसके अलावा आपके पास NOSCRIPT टैग है जिसका उपयोग आप जेएस अक्षम के साथ ब्राउज़रों के लिए पाठ दिखाने के लिए कर सकते हैं।


यह एक अच्छा जवाब नहीं है। पहले समाधान के लिए एक पृष्ठ पुनः लोड और एक फॉर्म सबमिशन की आवश्यकता होती है। दूसरा समाधान एक पॉपअप (ack!) खोलता है और क्लाइंट की तरफ से इसे "तेजी से" बंद कर देता है! -1
बेन

कभी-कभी आपको सर्वर साइड जानने की आवश्यकता होती है यदि किसी साइट में जेएस सक्षम है या नहीं, इसलिए मैं यह नहीं देखता कि आप इसे वापस पोस्ट करने के अलावा कैसे कर सकते हैं। इस बात से सहमत हैं कि एक पॉपअप बदसूरत नाद है मैं वास्तव में इस बारे में निश्चित नहीं हूं, लेकिन स्क्रीन के दृश्य क्षेत्र के बाहर पॉपअप खोलना संभव होना चाहिए ताकि उपयोगकर्ता इससे परेशान न हो। कोई सुंदर नहीं है, लेकिन यह काम करता है और कोई पृष्ठ पुनः लोड नहीं होता है।
rslite

स्पैम्बोट्स एक छिपे हुए क्षेत्र में भी पोस्ट करते हैं।
जैनिस वेनबर्ग्स

13

आप noscript टैग पर एक नज़र डालना चाहते हैं।

<script type="text/javascript">
...some javascript script to insert data...
</script>
<noscript>
   <p>Access the <a href="http://someplace.com/data">data.</a></p>
</noscript>

12

नोस्क्रिप्ट टैग अच्छी तरह से काम करता है, लेकिन बेकार जेएस फ़ाइलों की सेवा जारी रखने के लिए प्रत्येक अतिरिक्त पृष्ठ अनुरोध की आवश्यकता होगी, क्योंकि अनिवार्य रूप से नोस्क्रिप्ट एक ग्राहक जांच है।

आप JS के साथ कुकी सेट कर सकते हैं, लेकिन जैसा कि किसी और ने बताया, यह विफल हो सकता है। आदर्श रूप से, आप JS क्लाइंट पक्ष का पता लगाने में सक्षम होना चाहते हैं, और कुकीज़ का उपयोग किए बिना, उस उपयोगकर्ता के लिए सत्र सर्वर पक्ष सेट करें जो इंगित करता है कि JS सक्षम है।

एक संभावना गतिशील रूप से जावास्क्रिप्ट का उपयोग करके 1x1 छवि जोड़ने की है जहां src विशेषता वास्तव में एक सर्वर साइड स्क्रिप्ट है। यह सब स्क्रिप्ट वर्तमान उपयोगकर्ता सत्र को बचाता है जिसे JS सक्षम किया गया है ($ _SESSION ['js_enabled'])। फिर आप ब्राउज़र पर 1x1 रिक्त छवि आउटपुट कर सकते हैं। स्क्रिप्ट उन उपयोगकर्ताओं के लिए नहीं चलेगी जिनके पास JS अक्षम है, और इसलिए $ _SESSION ['js_enabled'] सेट नहीं किया जाएगा। फिर इस उपयोगकर्ता को दिए गए आगे के पृष्ठों के लिए, आप यह तय कर सकते हैं कि आपकी सभी बाहरी जेएस फ़ाइलों को शामिल करना है या नहीं, लेकिन आप हमेशा चेक को शामिल करना चाहेंगे, क्योंकि आपके कुछ उपयोगकर्ता नोस्क्रिप्ट फ़ायरफ़ॉक्स ऐड-ऑन का उपयोग कर रहे होंगे या जेएस कर सकते हैं। किसी अन्य कारण से अस्थायी रूप से अक्षम।

आप शायद इस चेक को अपने पृष्ठ के अंत के करीब कहीं शामिल करना चाहते हैं ताकि अतिरिक्त HTTP अनुरोध आपके पृष्ठ के प्रतिपादन को धीमा न करे।


12

इसे प्रत्येक पृष्ठ के HEAD टैग में जोड़ें।

<noscript>
        <meta http-equiv="refresh" runat="server" id="mtaJSCheck" content="0;logon.aspx" />
</noscript>

मतलब आपके पास है:

<head>
    <noscript>
        <meta http-equiv="refresh" runat="server" id="mtaJSCheck" content="0;logon.aspx" />
    </noscript>
</head>

जय के साथ धन्यवाद।


12

क्योंकि मैं हमेशा ब्राउज़र को देखने के लिए कुछ सार्थक देना चाहता हूं जो मैं अक्सर इस चाल का उपयोग करता हूं:

सबसे पहले, किसी पृष्ठ के किसी भी हिस्से को जावास्क्रिप्ट को ठीक से चलाने की आवश्यकता है (निष्क्रिय एचटीएमएल तत्वों को जो getElementById कॉल इत्यादि के माध्यम से संशोधित किया जाता है) के रूप में उपयोग करने योग्य बनाया गया है, इस धारणा के साथ कि ISN'T javaScript उपलब्ध है। (जैसा कि यह वहाँ नहीं था)

किसी भी तत्व को जावास्क्रिप्ट की आवश्यकता होगी, मैं एक टैग के अंदर रखता हूं जैसे कुछ:

<span name="jsOnly" style="display: none;"></span>

फिर मेरे दस्तावेज़ की शुरुआत में, मैं सेट करने के लिए एक लूप का उपयोग करता हूं .onloadया document.readyभीतर करता हूंgetElementsByName('jsOnly').style.display = ""; जेएस पर निर्भर तत्वों को वापस चालू । इस तरह, गैर-जेएस ब्राउज़रों को कभी भी साइट के जेएस निर्भर भागों को देखने की ज़रूरत नहीं है, और यदि उनके पास यह है, तो यह तैयार होने पर तुरंत दिखाई देता है।

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


10

यह "सबसे साफ" समाधान आईडी का उपयोग है:

<noscript>
    <style>
        body *{ /*hides all elements inside the body*/
            display: none;
        }
        h1{ /* even if this h1 is inside head tags it will be first hidden, so we have to display it again after all body elements are hidden*/
            display: block;
        }
    </style>
    <h1>JavaScript is not enabled, please check your browser settings.</h1>
</noscript>

9

पृष्ठ को रीफ्रेश करने और जावास्क्रिप्ट अक्षम होने पर सर्वर को सूचित करने के लिए एक सामान्य समाधान मेटा टैग के साथ होता है, जैसे:

<!DOCTYPE html>
<html lang="en">
    <head>
        <noscript>
            <meta http-equiv="refresh" content="0; /?javascript=false">
        </noscript>
        <meta charset="UTF-8"/>
        <title></title>
    </head>
</html>

उपरोक्त उदाहरण में जब जावास्क्रिप्ट को निष्क्रिय किया जाता है, तो ब्राउज़र 0 सेकंड में वेब साइट के होम पेज पर रीडायरेक्ट करेगा। इसके अलावा यह पैरामीटर जावास्क्रिप्ट = सर्वर को गलत भी भेजेगा।

एक सर्वर साइड स्क्रिप्ट जैसे नोड.जेएस या पीएचपी फिर पैरामीटर को पार्स कर सकते हैं और पता कर सकते हैं कि जावास्क्रिप्ट अक्षम है। इसके बाद ग्राहक को वेब साइट का एक विशेष गैर-जावास्क्रिप्ट संस्करण भेजा जा सकता है।


8

यदि जावास्क्रिप्ट को अक्षम किया गया है तो आपका क्लाइंट-साइड कोड वैसे भी नहीं चलेगा, इसलिए मुझे लगता है कि आप इसका मतलब यह चाहते हैं कि वह जानकारी उपलब्ध सर्वर-साइड है। उस मामले में, noscript कम सहायक है। इसके बजाय, मेरे पास एक छिपा हुआ इनपुट होगा और एक मान भरने के लिए जावास्क्रिप्ट का उपयोग करना होगा। आपके अगले अनुरोध या पोस्टबैक के बाद, यदि मूल्य है तो आपको पता है कि जावास्क्रिप्ट चालू है।

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


5

उदाहरण के लिए, हो सकता है कि आप ब्राउज़र को एक नए, स्क्रिप्ट से भरे पेज पर पुनर्निर्देशित करने के लिए document.location = 'java_page.html' जैसी किसी चीज़ का उपयोग करें। पुनर्निर्देशित करने में विफलता का अर्थ है कि जावास्क्रिप्ट अनुपलब्ध है, जिस स्थिति में आप या तो सीजीआई आरओ यूटाइन का सहारा ले सकते हैं या टैग के बीच उपयुक्त कोड डाल सकते हैं। (नोट: NOSCRIPT केवल नेटस्केप नेविगेटर 3.0 और उसके बाद के संस्करण में उपलब्ध है।)

क्रेडिट http://www.intranetjournal.com/faqs/jsfaq/how12.html


4

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


4

मुझे लगता है कि आप एक छवि टैग को नोस्क्रिप्ट टैग में सम्मिलित कर सकते हैं और आँकड़े देख सकते हैं कि आपकी साइट कितनी बार और कितनी बार इस छवि को लोड किया गया है।


4

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


3

इसमें पता लगाओ क्या? जावास्क्रिप्ट? यह असंभव होगा। यदि आप इसे लॉगिंग उद्देश्यों के लिए चाहते हैं, तो आप किसी प्रकार की ट्रैकिंग योजना का उपयोग कर सकते हैं, जहां प्रत्येक पृष्ठ में जावास्क्रिप्ट है जो एक विशेष संसाधन (शायद बहुत छोटा gifया समान) के लिए अनुरोध करेगा । इस तरह आप अपनी ट्रैकिंग फ़ाइल के लिए केवल अद्वितीय पेज अनुरोधों और अनुरोधों के बीच अंतर कर सकते हैं।


3

आप बस एक अपहृत onClick () ईवेंट हैंडलर को क्यों नहीं डालते हैं जो केवल JS सक्षम होने पर ही फायर करेगा, और इसका उपयोग क्लिक किए गए / चयनित URL में एक पैरामीटर (js = true) को जोड़ने के लिए (आप ड्रॉप डाउन सूची का भी पता लगा सकते हैं) और एक छिपे हुए फॉर्म फ़ील्ड को जोड़ने के मूल्य को बदलें)। तो अब जब सर्वर इस पैरामीटर (js = true) को देखता है तो यह जानता है कि JS सक्षम है और फिर अपने फैंसी लॉजिक सर्वर-साइड करें।
इसका नकारात्मक पक्ष यह है कि पहली बार जब कोई उपयोगकर्ता आपकी साइट पर आता है, तो बुकमार्क, URL, खोज इंजन जनरेट किया गया URL- आपको यह पता लगाना होगा कि यह एक नया उपयोगकर्ता है इसलिए URL में संलग्न NVP की तलाश न करें, और जेएस सक्षम / अक्षम उपयोगकर्ता को निर्धारित करने के लिए सर्वर को अगले क्लिक के लिए इंतजार करना होगा। इसके अलावा, एक और नकारात्मक पहलू यह है कि URL ब्राउज़र URL पर समाप्त हो जाएगा और यदि यह उपयोगकर्ता इस URL को बुकमार्क करता है, तो इसके पास js = true NVP होगा, भले ही उपयोगकर्ता के पास JS सक्षम न हो, हालांकि अगले क्लिक पर सर्वर होगा यह जानने के लिए बुद्धिमान रहें कि क्या उपयोगकर्ता के पास अभी भी जेएस सक्षम है या नहीं। आहें .. यह मज़ा है ...


3

उपयोगकर्ताओं को JavaScripts को सक्षम करने के लिए मजबूर करने के लिए, मैंने प्रत्येक लिंक की 'href' विशेषता को उसी दस्तावेज़ में सेट किया है, जो उपयोगकर्ता को JavaScripts को सक्षम करने या फ़ायरफ़ॉक्स डाउनलोड करने के लिए सूचित करता है (यदि वे नहीं जानते कि JavaScripts कैसे सक्षम करें)। मैंने वास्तविक लिंक url को लिंक के 'नाम' विशेषता के लिए संग्रहीत किया है और एक वैश्विक ऑनक्लिक ईवेंट को परिभाषित किया है जो 'नाम' विशेषता को पढ़ता है और वहां पृष्ठ को रीडायरेक्ट करता है।

यह मेरे उपयोगकर्ता-आधार के लिए अच्छी तरह से काम करता है, हालांकि थोड़ा फासीवादी;)।


और यदि उपयोगकर्ता के पास जेएस सक्षम है और आपके प्रगतिशील जावास्क्रिप्ट में आने से पहले लिंक पर क्लिक करता है तो थोड़ा सा कष्टप्रद है ...
Simon_Weaver

1
ज़रूर, लेकिन अभी तक कोई मुद्दा नहीं बताया।
Jan Sahin

3

आप पता नहीं लगाते हैं कि उपयोगकर्ता के पास जावास्क्रिप्ट अक्षम है (सर्वर साइड या क्लाइंट)। इसके बजाय, आप मानते हैं कि जावास्क्रिप्ट अक्षम है और जावास्क्रिप्ट अक्षम के साथ अपने वेबपेज का निर्माण करें। यह आवश्यकता की पूर्ति करता हैnoscript , जिसे आपको किसी भी तरह से उपयोग करने से बचना चाहिए क्योंकि यह काफी सही काम नहीं करता है और अनावश्यक है।

उदाहरण के लिए, बस कहने के लिए अपनी साइट का निर्माण करें <div id="nojs">This website doesn't work without JS</div>

फिर, आपकी स्क्रिप्ट बस document.getElementById('nojs').style.display = 'none';सामान्य जेएस व्यवसाय के बारे में करेगी और जाएगी ।


यह एक महान सहज दृष्टिकोण है <noscript> टैग अलग-अलग पृष्ठों पर बनाए रखने के लिए बहुत कठिन हैं इस दृष्टिकोण के साथ आप अपनी सीएसएस फ़ाइल के माध्यम से अपनी noscript स्टाइल को बनाए रख सकते हैं।
zadubz

3

एक शुद्ध सर्वर साइड सॉल्यूशन का उपयोग करके कुकीज़ की जाँच करें जो मैंने यहाँ प्रस्तुत की है, फिर Jquery.Cookie का उपयोग करके कुकी को ड्रॉप करके जावास्क्रिप्ट के लिए जाँच करें और फिर कुकी के लिए इस तरह से जाँच करें दोनों कुकीज़ और जावास्क्रिप्ट के लिए यू चेक


3

कुछ मामलों में, इसे पीछे करना पर्याप्त हो सकता है। जावास्क्रिप्ट का उपयोग करके एक वर्ग जोड़ें:

// Jquery
$('body').addClass('js-enabled');

/* CSS */
.menu-mobile {display:none;}
body.js-enabled .menu-mobile {display:block;}

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


3

मैं अपने आँकड़ों को विश्वसनीय आँकड़ों को प्राप्त करने के लिए जोड़ना चाहता हूँ कि कितने वास्तविक उपयोगकर्ता कुल उपयोगकर्ताओं पर जावास्क्रिप्ट के साथ मेरी साइट पर जाएँ। चेक इन लाभों के साथ प्रति सत्र केवल एक बार किया जाता है:

  • 100 पृष्ठों या सिर्फ 1 पर जाने वाले उपयोगकर्ताओं को 1 प्रत्येक में गिना जाता है। यह एकल उपयोगकर्ताओं पर ध्यान केंद्रित करने की अनुमति देता है, न कि पृष्ठों पर।
  • वैसे भी पृष्ठ प्रवाह, संरचना या शब्दार्थ को नहीं तोड़ता है
  • उपयोगकर्ता एजेंट को लॉग कर सकता है। यह बॉट को सांख्यिकी से बाहर निकालने की अनुमति देता है, जैसे कि गूगल बॉट और बिंग बॉट जो आमतौर पर जेएस अक्षम है! IP, समय आदि भी लॉग कर सकते हैं ...
  • प्रति सत्र केवल एक चेक (न्यूनतम अधिभार)

मेरे कोड में अजाक्स के साथ PHP, mysql और jquery का उपयोग किया गया है, लेकिन इसे अन्य अपंगों के लिए अनुकूलित किया जा सकता है:

अपने DB में एक तालिका इस तरह बनाएं:

CREATE TABLE IF NOT EXISTS `log_JS` (
  `logJS_id` int(11) NOT NULL AUTO_INCREMENT,
  `data_ins` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `session_id` varchar(50) NOT NULL,
  `JS_ON` tinyint(1) NOT NULL DEFAULT '0',
  `agent` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`logJS_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

Session_start () या समकक्ष (आवश्यक jquery) का उपयोग करने के बाद इसे हर पृष्ठ पर जोड़ें:

<?  if (!isset($_SESSION["JSTest"]))
    { 
        mysql_query("INSERT INTO log_JS (session_id, agent) VALUES ('" . mysql_real_escape_string(session_id()) . "', '" . mysql_real_escape_string($_SERVER['HTTP_USER_AGENT']). "')"); 
        $_SESSION["JSTest"] = 1; // One time per session
        ?>
        <script type="text/javascript">
            $(document).ready(function() { $.get('JSOK.php'); });
        </script>
        <?
    }
?>

पेज इस तरह बनाएं JSOK.php:

<?
include_once("[DB connection file].php");   
mysql_query("UPDATE log_JS SET JS_ON = 1 WHERE session_id = '" . mysql_real_escape_string(session_id()) . "'");

3

मैंने स्वयं सीएसएस और जावास्क्रिप्ट का उपयोग करके एक और तरीका निकाला है।
यह केवल कक्षाओं और आईडी के साथ छेड़छाड़ शुरू करने के लिए है।

CSS स्निपेट:
1. एक सीएसएस आईडी नियम बनाएं, और इसे #jsDis नाम दें।
2. बॉडी एलिमेंट के बाद टेक्स्ट जेनरेट करने के लिए "कंटेंट" प्रॉपर्टी का इस्तेमाल करें। (आप अपनी इच्छानुसार इसे स्टाइल कर सकते हैं)।
3 एक दूसरा सीएसएस आईडी नियम बनाएं और इसे #jsEn नाम दें, और इसे स्टाइल करें। (सादगी के लिए, मैंने अपने #jsEn नियम को एक अलग पृष्ठभूमि का रंग दिया।

<style>
#jsDis:after {
    content:"Javascript is Disable. Please turn it ON!";
    font:bold 11px Verdana;
    color:#FF0000;
}

#jsEn {
    background-color:#dedede;
}

#jsEn:after {
    content:"Javascript is Enable. Well Done!";
    font:bold 11px Verdana;
    color:#333333;
}
</style>

जावास्क्रिप्ट स्निपेट:
1. एक फ़ंक्शन बनाएँ।
2. GetElementById के साथ बॉडी आईडी को पकड़ो और इसे एक वैरिएबल पर असाइन करें।
3. JS फ़ंक्शन 'setAttribute' का उपयोग करके, BODY तत्व की ID विशेषता का मान बदलें।

<script>
function jsOn() {
    var chgID = document.getElementById('jsDis');
    chgID.setAttribute('id', 'jsEn');
}
</script>

HTML हिस्सा।
1. #jsDis की आईडी के साथ BODY तत्व विशेषता को नाम दें।
2. फ़ंक्शन नाम के साथ ऑनलाड इवेंट जोड़ें। (JSON ())।

<body id="jsDis" onLoad="jsOn()">

क्योंकि BODY टैग को #jsDis की आईडी दी गई है:
- यदि जावास्क्रिप्ट सक्षम है, तो यह स्वयं BODY टैग की विशेषता से बदल जाएगा।
- यदि जावास्क्रिप्ट निष्क्रिय हो जाता है, तो यह css 'सामग्री:' नियम पाठ दिखाएगा।

आप एक #wrapper कंटेनर के साथ, या JS का उपयोग करने वाले किसी भी DIV के साथ खेल सकते हैं।

आशा है कि यह विचार प्राप्त करने में मदद करता है।


2

नोस्क्रिप्ट के अंदर मेटा में रिफ्रेश जोड़ना एक अच्छा विचार नहीं है।

  1. क्योंकि noscript टैग XHTML के अनुरूप नहीं है

  2. विशेषता मान "ताज़ा करें" गैरमानक है, और इसका उपयोग नहीं किया जाना चाहिए। "ताज़ा" उपयोगकर्ता से एक पृष्ठ का नियंत्रण लेता है। "रीफ़्रेश" का उपयोग करने से W3C की वेब सामग्री एक्सेसिबिलिटी दिशानिर्देश --- संदर्भ http://www.w3schools.com/TAGS/att_meta_http_equiv.asp में विफलता होगी ।


XHTML के बारे में किसी ने कुछ नहीं कहा। <noscript> पूरी तरह से मान्य HTML 4.01 सख्त है।
टॉम

2
XHTML 1.0 और XHTML 1.1 में भी noscript पूरी तरह से मान्य है। इसमें मेटा तत्व शामिल नहीं हो सकते हैं, और इसे प्रगतिशील वृद्धि के पक्ष में टाला जाना चाहिए, लेकिन यह भाषाओं का हिस्सा है।
क्वेंटिन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.