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




html code-snippets (20)

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

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

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

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

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

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


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


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

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

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


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


उदाहरण के लिए, ब्राउज़र को एक नए, स्क्रिप्ट-लड़े पृष्ठ पर रीडायरेक्ट करने के लिए आप दस्तावेज़.लोकेशन = 'java_page.html' जैसे कुछ का उपयोग कर सकते हैं। रीडायरेक्ट में विफलता का तात्पर्य है कि जावास्क्रिप्ट अनुपलब्ध है, इस मामले में आप या तो CGI ro utines का सहारा ले सकते हैं या टैग के बीच उचित कोड डाल सकते हैं। (नोट: NOSCRIPT केवल नेटस्केप नेविगेटर 3.0 और ऊपर उपलब्ध है।)

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


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

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


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


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

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

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

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


जावास्क्रिप्ट अक्षम होने पर 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>

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

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

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

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

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


जेएस सक्षम होने पर बस ट्रैक करना चाहते हैं, राज्य को स्टोर करने के लिए एजेक्स रूटीन का उपयोग करने के बारे में कैसे? उदाहरण के लिए, मैं टेबल के एक सेट में सभी आगंतुकों / विज़िट लॉग करता हूं। JSenabled फ़ील्ड को FALSE के डिफ़ॉल्ट पर सेट किया जा सकता है, और जेएस सक्षम होने पर AJAX दिनचर्या इसे सत्य पर सेट कर देगी।


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

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

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

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


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

<!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 सेकंड में वेब साइट के होम पेज पर रीडायरेक्ट करेगा। इसके अलावा यह सर्वर पर पैरामीटर जावास्क्रिप्ट = झूठी भी भेज देगा।

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


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


मैं यहाँ अपना .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 के साथ लपेटा गया है। नोस्क्रिप्ट टैग के अंदर सीएसएस तब आपकी सभी पेज सामग्री को छिपाएगा, और इसके बजाय जो कुछ भी "जेएस" संदेश दिखाना नहीं चाहता है उसे प्रदर्शित करेगा। यह वास्तव में जीमेल क्या करता है ... और यदि यह Google के लिए पर्याप्त है, तो यह मेरी छोटी साइट के लिए काफी अच्छा है।


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

सीएसएस स्निपेट:
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. जेएस फ़ंक्शन 'setAttribute' का उपयोग करके, बॉडी तत्व की आईडी विशेषता का मान बदलें।

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

एचटीएमएल भाग।
1. #jsDis की आईडी के साथ बॉडी तत्व विशेषता का नाम दें।
2. फ़ंक्शन नाम के साथ ऑनलोड ईवेंट जोड़ें। (JSON ())।

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

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

आप # रैपर कंटेनर के साथ या जेएस का उपयोग करने वाले किसी भी डीआईवी के साथ खेल सकते हैं।

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


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

<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 हो जाती है, तो कोई जेएस नहीं। अगर यह 1 मिलता है, जेएस!


यह "स्वच्छतम" समाधान आईडी उपयोग है:

<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>

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

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

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

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

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

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


<noscript> भी आवश्यक नहीं है, और एक्सएचटीएमएल में समर्थित नहीं है इसका उल्लेख नहीं है

कार्य उदाहरण :

<!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>

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






code-snippets