यदि ब्राउज़र HTML5 लोकल स्टोरेज को सपोर्ट करता है तो कैसे पता करें


84

ls existIE7 में निम्नलिखित कोड अलर्ट :

if(window.localStorage) {
    alert('ls exists');
} else {
    alert('ls does not exist');
}

IE7 वास्तव में स्थानीय भंडारण का समर्थन नहीं करता है, लेकिन यह अभी भी अलर्ट करता है। शायद ऐसा इसलिए है क्योंकि मैं IE7 ब्राउज़र और दस्तावेज़ मोड में IE9 का उपयोग IE9 डेवलपर टूल का उपयोग करके कर रहा हूं। या शायद यह सिर्फ गलत तरीका है अगर एलएस का समर्थन किया गया है। सही तरीका क्या है?

इसके अलावा, मैं केवल कुछ एचटीएमएल 5 सुविधाओं का उपयोग करने और एक बड़ी स्क्रिप्ट को लोड करने के लिए उपयोग करने के बाद से उन कुछ चीजों के लिए समर्थन का पता लगाने के लायक नहीं है, मैं मॉडर्निज़्र का उपयोग नहीं करना चाहता।


जवाबों:


99

आपको आधुनिकीकरण का उपयोग करने की आवश्यकता नहीं है, लेकिन यदि localStorageआप समर्थित हैं, तो इसका पता लगाने के लिए आप उनकी विधि का उपयोग कर सकते हैं

के लिए github परीक्षण में आधुनिकीकरण
localStorage

// In FF4, if disabled, window.localStorage should === null.

// Normally, we could not test that directly and need to do a
//   `('localStorage' in window) && ` test first because otherwise Firefox will
//   throw bugzil.la/365772 if cookies are disabled

// Also in iOS5 & Safari Private Browsing mode, attempting to use localStorage.setItem
// will throw the exception:
//   QUOTA_EXCEEDED_ERRROR DOM Exception 22.
// Peculiarly, getItem and removeItem calls do not throw.

// Because we are forced to try/catch this, we'll go aggressive.

// Just FWIW: IE8 Compat mode supports these features completely:
//   www.quirksmode.org/dom/html5.html
// But IE8 doesn't support either with local files

Modernizr.addTest('localstorage', function() {
    var mod = 'modernizr';
    try {
        localStorage.setItem(mod, mod);
        localStorage.removeItem(mod);
        return true;
    } catch(e) {
        return false;
    }
});

वर्तमान स्रोत कोड के साथ अद्यतन किया गया


3
var mod = "test";ट्राइ-कैच ब्लॉक से पहले जोड़ें , अन्यथा यह हमेशा विफल रहेगा क्योंकि मॉड वहां अपरिभाषित है।
महन

5
यह विफल हो सकता है यदि स्थानीयस्टोरेज में कोई स्थान नहीं बचा है।
पैट्रिक

1
ईमानदारी से, यह सबसे अच्छा परीक्षण नहीं है क्योंकि क्या होगा अगर स्थानीय भंडारण सिर्फ भरा हुआ है? लोकलस्टोरेज का समर्थन किया जा सकता है, लेकिन सिर्फ उस राज्य में जहां आप जोड़ नहीं सकते।
डेमीइम्प

2
ध्यान दें, यह अन्य विंडो में भंडारण की घटनाओं को आग देगा
मार्क स्वार्डस्ट्रॉम

2
@ और - हाँ, मुझे पता है। यह परीक्षण स्थानीय संग्रहण को संशोधित करता है। यदि आप ऐसा नहीं करना चाहते हैं और समर्थन के लिए परीक्षण करना चाहते हैं, तो अन्य समाधान बेहतर विकल्प हो सकते हैं।
मार्क स्वार्डस्ट्रॉम

44
if(typeof Storage !== "undefined")
  {
  // Yes! localStorage and sessionStorage support!
  // Some code.....
  }
else
  {
  // Sorry! No web storage support..
  }

7
typeof(Storage) !== void(0)बेहतर समाधान है
पेटा

2
@ वेटजेटो यह वास्तव में होना चाहिएif (Storage !== void(0))
एंड्रयू

4
typeofकोई फ़ंक्शन नहीं है, इसका भाषा ऑपरेटर है। कोष्ठक क्यों?
r3wt

1
यह W3Schools वेबसाइट पर पाया जाने वाला एक मामूली संस्करण है । यह भी काम नहीं लगता है।
फूजीफेस

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

16

यह फ़ंक्शन ठीक काम करता है:

function supports_html5_storage(){
    try {
        return 'localStorage' in window && window['localStorage'] !== null;
    } catch(e) {
        return false;
    }
}

स्रोत: www.diveintohtml5.info


1
यह लंबे समय तक चलता है। और मुझे पता है, यह सबसे अच्छा जवाब है क्योंकि मैंने किताब पढ़ी है। मेरे सवाल से हम एक चीज़ को दो बार NULL होने की जाँच क्यों कर रहे हैं?
अली सबरी

मुझे लगता है कि पहला 'localStorage' in windowचेक जो विंडो ऑब्जेक्ट में मौजूद है ('अपरिभाषित नहीं है'), और दूसरा window['localStorage'] !== nullचेक करता है कि वह संपत्ति NULL नहीं है।
जुआनरा

1
बस खिड़की के एक गैर-सख्त समानता जांच ['लोकलस्टोरेज'] == नल से क्या यह हासिल नहीं किया जा सकता है? इसमें अपरिभाषित और अशक्त दोनों प्रकार के चेक शामिल हैं।
त्रिंको

खैर, मुझे ऐसा लगता है। यदि आप youwindow ['something'] == null the की जांच करते हैं, तो परिणाम अपरिभाषित होते हुए भी "सत्य" है। फिर भी मैं स्पष्टता के लिए पहली विधि चुनूंगा।
13

15

इसके अलावा, मैं केवल कुछ एचटीएमएल 5 सुविधाओं का उपयोग करने और एक बड़ी स्क्रिप्ट को लोड करने के लिए उपयोग करने के बाद से उन कुछ चीजों के लिए समर्थन का पता लगाने के लायक नहीं है, मैं मॉडर्निज़्र का उपयोग नहीं करना चाहता।

अपनी आवश्यकताओं को पूरा करने के लिए मॉडर्निज़र फ़ाइल आकार को कम करने के लिए http://modernizr.com/download/ पर फ़ाइल को अनुकूलित करें । एक स्थानीय-संस्करण केवल मॉडर्निज़्र का संस्करण 1.55KB पर आता है।


3
नमस्ते, ढेर अतिप्रवाह में आपका स्वागत है! यह वास्तव में अधिक लगता है जैसे मूल प्रश्न के उत्तर के बजाय यह एक टिप्पणी होनी चाहिए । मुझे लगता है कि आप अभी तक टिप्पणी नहीं कर सकते, लेकिन 50 प्रतिनिधि तक पहुंचना कठिन या समय लेने वाला नहीं है।
जेसी

1
आप इसे कर सकते हैं - जाने के लिए केवल 9 और प्रतिनिधि! ठीक है मैंने अब तक अपवित्र किया है कि आपके पास 51 है
साइमन_वेवर

मुझे एहसास है कि 1.55kb कुछ भी नहीं है, लेकिन यह अभी भी लगता है कि लोकलस्टोरेज सपोर्ट को चेक करने के लिए ओवरकिल है।
टायलर बिस्को

9

कोशिश करें window.localStorage!==undefined:

if(window.localStorage!==undefined){
    //Do something
}else{
    alert('Your browser is outdated!');
}

आप भी उपयोग कर सकते हैं typeof window.localStorage!=="undefined" , लेकिन ऊपर दिया गया कथन पहले से ही ऐसा करता है


2
सफारी में लोकलस्टेज हो सकता है लेकिन अगर प्राइवेट मोड (QuotaExceededError) में कोई एरर डाली जाती है तो tr / कैच सबसे अच्छा ऑप्शन IMHO है
Endless

1
हम्म, मुझे नहीं पता था कि। लेकिन यह केवल उस त्रुटि को फेंकता है जब सामान लिखने की कोशिश की जाती है, है ना?
दानिलो वैलेनटाइ डे

1
असल में window.localStorage विशेषता (जैसे इस उदाहरण में दिखाया गया है) की मात्र जाँच जब सफारी कुकीज़ और वेबसाइट डेटा को ब्लॉक करने के लिए सेट की जाती है, तो एक त्रुटि होगी। विशेष रूप से:SecurityError: DOM Exception 18: An attempt was made to break through the security policy of the user agent.
आरोनियस

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

7

मैंने इसे उत्तरों में नहीं देखा, लेकिन मुझे लगता है कि यह जानना अच्छा है कि आप इस तरह के सरल परीक्षणों के लिए आसानी से वेनिला JS या jQuery का उपयोग कर सकते हैं, और जबकि Modernizr बहुत मदद करता है, इसके बिना स्वच्छ समाधान हैं।

यदि आप jQuery का उपयोग करते हैं , तो आप कर सकते हैं:

var _supportsLocalStorage = !!window.localStorage
    && $.isFunction(localStorage.getItem)
    && $.isFunction(localStorage.setItem)
    && $.isFunction(localStorage.removeItem);

या, शुद्ध वेनिला जावास्क्रिप्ट के साथ :

var _supportsLocalStorage = !!window.localStorage
    && typeof localStorage.getItem === 'function'
    && typeof localStorage.setItem === 'function'
    && typeof localStorage.removeItem === 'function';

फिर, आप बस समर्थन का परीक्षण करने के लिए एक IF करेंगे:

if (_supportsLocalStorage) {
    console.log('ls is supported');
    alert('ls is supported');
}

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


3

पकड़ने की कोशिश करेंगे काम:

    try{
       localStorage.setItem("name",name.value);
       localStorage.setItem("post",post.value);
       }
    catch(e){
       alert(e.message);    
       }



1

एक गैटर को जोड़ने के लिए एंड्रिया के जवाब को संशोधित करना उपयोग करना आसान बनाता है। नीचे के साथ आप बस कहते हैं:if(ls)...

  var ls =  {
    get: function () { 
      var test = 'test';
      try {
        localStorage.setItem(test, test);
        localStorage.removeItem(test);
        return true;
      } catch(e) {
        return false;
      }
    }
  };

var ls =  {
  get: function () { 
    var test = 'test';
    try {
      localStorage.setItem(test, test);
      localStorage.removeItem(test);
      return true;
    } catch(e) {
      return false;
    }
  }
};

function script(){
  if(ls){
    alert('Yes');
  } else {
    alert('No');
  }
}
<button onclick="script()">Local Storage Support?</button>


0

मुझे पता है कि मुझे पार्टी में थोड़ी देर हो गई है, लेकिन मेरे पास कुछ उपयोगी फ़ंक्शंस हैं जिन्हें मैंने पकाया और 'manage_storage.js' नामक फ़ाइल में फेंक दिया। मुझे उम्मीद है कि वे आप लोगों के लिए उतने ही उपयोगी होंगे, जितना उन्होंने मेरी अच्छी सेवा की है।

याद रखें: वह फ़ंक्शन जिसे आप खोज रहे हैं (जो इस प्रश्न का उत्तर देता है) है isLclStorageAllowed

तो आगे की हलचल के बिना यहाँ मेरा कोड है:

/* Conditional Function checks a web browser for 'session storage' support. [BEGIN] */

if (typeof isSessStorageAllowed !== 'function')
    {
        function isSessStorageAllowed()
            {
                if (!!window.sessionStorage && typeof sessionStorage.getItem === 'function' && typeof sessionStorage.setItem === 'function' && typeof sessionStorage.removeItem === 'function')
                    {
                        try
                            {
                                var cur_dt = new Date();
                                var cur_tm = cur_dt.getTime();
                                var ss_test_itm_key = 'ss_test_itm_' + String(cur_tm);
                                var ss_test_val = 'ss_test_val_' + String(cur_tm);

                                sessionStorage.setItem(ss_test_itm_key, String(ss_test_val));

                                if (sessionStorage.getItem(ss_test_itm_key) == String(ss_test_val))
                                    {
                                        return true;
                                    }
                                else
                                    {
                                        return false;
                                    };

                                sessionStorage.removeItem(ss_test_itm_key);
                            }
                        catch (exception)
                            {
                                return false;
                            };
                    }
                else
                    {
                        return false;
                    };
            };
    };

/* Conditional Function checks a web browser for 'session storage' support. [END] */

/* Conditional Function checks a web browser for 'local storage' support. [BEGIN] */

if (typeof isLclStorageAllowed !== 'function')
    {
        function isLclStorageAllowed()
            {
                if (!!window.localStorage && typeof localStorage.getItem === 'function' && typeof localStorage.setItem === 'function' && typeof localStorage.removeItem === 'function')
                    {
                        try
                            {
                                var cur_dt = new Date();
                                var cur_tm = cur_dt.getTime();
                                var ls_test_itm_key = 'ls_test_itm_' + String(cur_tm);
                                var ls_test_val = 'ls_test_val_' + String(cur_tm);

                                localStorage.setItem(ls_test_itm_key, String(ls_test_val));

                                if (localStorage.getItem(ls_test_itm_key) == String(ls_test_val))
                                    {
                                        return true;
                                    }
                                else
                                    {
                                        return false;
                                    };

                                localStorage.removeItem(ls_test_itm_key);
                            }
                        catch (exception)
                            {
                                return false;
                            };
                    }
                else
                    {
                        return false;
                    };
            };
    };

/* Conditional Function checks a web browser for 'local storage' support. [END] */

/* Conditional Function checks a web browser for 'web storage' support. [BEGIN] */

/* Prerequisites: 'isSessStorageAllowed()', 'isLclStorageAllowed()' */

if (typeof isWebStorageAllowed !== 'function')
    {
        function isWebStorageAllowed()
            {
                if (isSessStorageAllowed() === true && isLclStorageAllowed() === true)
                    {
                        return true;
                    }
                else
                    {
                        return false;
                    };
            };
    };

/* Conditional Function checks a web browser for 'web storage' support. [END] */
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.