ব্রাউজার HTML5 লোকাল স্টোরেজ সমর্থন করে কিনা তা কীভাবে সনাক্ত করবেন


85

ls existআই 7 তে নিম্নলিখিত কোড সতর্কতা :

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

আই 7 সত্যই স্থানীয় সঞ্চয়স্থান সমর্থন করে না তবে এটি এটি সতর্ক করে। সম্ভবত এটি কারণ আমি আইই 9 ব্রাউজারে আই 9 ব্যবহার করছি এবং আইই 9 বিকাশকারী সরঞ্জামটি ব্যবহার করে নথি মোড। অথবা সম্ভবত এলএস সমর্থিত হলে এটি পরীক্ষা করার জন্য এটিই ভুল উপায়। সঠিক উপায় কি?

এছাড়াও আমি মডার্নিজার ব্যবহার করতে চাই না যেহেতু আমি কেবল কয়েকটি HTML5 বৈশিষ্ট্য ব্যবহার করছি এবং একটি বড় স্ক্রিপ্ট লোড করা কেবলমাত্র এই কয়েকটি জিনিসের জন্য সমর্থন সনাক্ত করার জন্য মূল্যবান নয়।


উত্তর:


100

আপনাকে মডার্নিজার ব্যবহার করতে হবে না, তবে আপনি localStorageসমর্থন করে কিনা তা সনাক্ত করতে তাদের পদ্ধতিটি ব্যবহার করতে পারেন

গিথুব পরীক্ষায় আধুনিকীকরণের
জন্য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;
    }
});

বর্তমান উত্স কোড সহ আপডেট হয়েছে


4
যোগ var mod = "test";করে দেখুন-ধরা ব্লক আগে, অন্যথায় এই সবসময় ব্যর্থ হবে যেহেতু গেলিক ভাষার সেখানে undefined করা হয়।
মাহন

4
স্থানীয় স্টোরেজে বাকী না থাকলে এই ব্যর্থ হতে পারে।
প্যাট্রিক

4
সত্যিই, এটি সর্বোত্তম পরীক্ষা নয় কারণ স্থানীয় স্টোরেজটি কেবল পূর্ণ হলে কী হবে? লোকালস্টোরেশন সমর্থিত হতে পারে তবে কেবলমাত্র এমন অবস্থায় যেখানে আপনি যুক্ত করতে পারবেন না।
ডেমিআইম্প

4
দ্রষ্টব্য, এটি অন্যান্য উইন্ডোগুলিতে স্টোরেজ ইভেন্টগুলিকে আগুন ধরিয়ে দেবে
মার্ক সোয়ার্ডস্ট্রম

4
@ আন্ড্রেয়াস - হ্যাঁ, আমি জানি। এই পরীক্ষাটি স্থানীয় স্টোরেজটি পরিবর্তন করে। আপনি যদি তা না ঘটে এবং কেবল সহায়তার জন্য পরীক্ষা করতে চান তবে অন্যান্য সমাধানগুলি আরও ভাল পছন্দ হতে পারে।
মার্ক সোয়ার্ডস্ট্রম

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

7
typeof(Storage) !== void(0)আরও ভাল সমাধান
পেটজা

4
@ পেটজাটো আসলে এটি হওয়া উচিতif (Storage !== void(0))
অ্যান্ড্রু

4
typeofকোনও ফাংশন নয়, এটি একটি ভাষা অপারেটর। প্রথম বন্ধনী কেন?
r3wt 5'15

4
এই W3Schools পাওয়া যায় সামান্য বৈকল্পিক উপস্থিত হতে পারে ওয়েবসাইট । এটিও কাজ করে বলে মনে হয় না।
ফুজিফেস

4
সাফারিতে প্রাইভেট ব্রাউজিং মোড লোকালস্টোরারে লেখার পক্ষে সমর্থন করে না, তবে এই চেকটি সেই ক্ষেত্রেই সত্য ফিরে আসে। আন্ড্রেয়াসের সমাধান এই কেসটি পরিচালনা করে।
দীপক জয়

16

এই ফাংশনটি ভাল কাজ করে:

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

সূত্র: www.diveintohtml5.info


4
এটি দীর্ঘ সময় পেরিয়ে গেছে। এবং আমি জানি, বইটি পড়ার পর থেকে এটি সেরা উত্তর। আমার প্রশ্ন দ্বারা আমরা কেন একটি জিনিস দুবার পরীক্ষা করে নিল করব?
আলী সাবেরি

আমি মনে করি 'localStorage' in windowযে উইন্ডো অবজেক্টে সম্পত্তিটি বিদ্যমান রয়েছে তা প্রথম চেক করে ('অপরিজ্ঞাত' নয়), এবং দ্বিতীয়টি window['localStorage'] !== nullপরীক্ষা করে যে সেই সম্পত্তিটি নুল নয়।
যুয়ানরা

4
উইন্ডো ['লোকালস্টোরেজ'] == নালার কেবল অ-কঠোর সাম্যতার পরীক্ষা করেই কি তা অর্জন করা যায় না? এটি অপরিজ্ঞাত এবং নাল চেক উভয়ই কভার করে।
ট্রায়ঙ্কো

ঠিক আছে, আমিও তাই অনুমান করি। যদি আপনি উইন্ডো ['কিছু'] == নালু পরীক্ষা করেন তবে ফলাফলটি "সত্য", এটি অপরিবর্তিত থাকলেও। তবুও আমি স্বচ্ছতার জন্য প্রথম পদ্ধতিটি বেছে নেব।
জুয়ানরা

15

এছাড়াও আমি মডার্নিজার ব্যবহার করতে চাই না যেহেতু আমি কেবল কয়েকটি HTML5 বৈশিষ্ট্য ব্যবহার করছি এবং একটি বড় স্ক্রিপ্ট লোড করা কেবলমাত্র এই কয়েকটি জিনিসের জন্য সমর্থন সনাক্ত করার জন্য মূল্যবান নয়।

মডার্নজার ফাইলের আকার হ্রাস করতে আপনার প্রয়োজন অনুসারে ফাইলটিকে http://modernizr.com/download/ এ কাস্টমাইজ করুন । মডার্নিজারের একমাত্র স্থানীয় স্টোরেজ সংস্করণ 1.55KB এ আসে।


4
হাই, স্ট্যাক ওভারফ্লোতে আপনাকে স্বাগতম! এটি সত্যই বেশি শোনাচ্ছে এটির মূল প্রশ্নের উত্তর না দিয়ে মন্তব্য হওয়া উচিত । আমি বুঝতে পেরেছি আপনি এখনও মন্তব্য করতে পারবেন না, তবে 50 টি প্রতিনিধিতে পৌঁছানো কঠিন বা সময় সাপেক্ষ নয়।
জেসি

4
আপনি এটি করতে পারেন - আরও 9 জন প্রতিনিধি যান! ঠিক আছে আমি upvated তাই এখন আপনার 51
সাইমন_উইভার

আমি বুঝতে পারি 1.55kb কিছুই নয়, তবে এখনও লোকাল স্টোরেজ সমর্থন পরীক্ষা করার জন্য এটি ওভারকিলের মতো মনে হয়।
টাইলার বিস্কো

9

চেষ্টা করুন window.localStorage!==undefined:

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

আপনি এটি ব্যবহার করতে পারেন typeof window.localStorage!=="undefined", তবে উপরের বিবৃতিটি ইতিমধ্যে এটি করেছে


4
সাফারিতে লোকালস্টোরেজ থাকতে পারে তবে প্রাইভেট মোডে (কোটাএক্সসিডেড এরির) যদি ত্রুটি ফেলে দেয় তবে ট্র / ক্যাচই সেরা বিকল্প আইএমএইচও
এন্ডলেস

4
হুঁ, আমি এটা জানতাম না। স্টাফ লেখার চেষ্টা করার সময় এটি কেবল ত্রুটি ছুঁড়ে ফেলেছে, তাই না?
ড্যানিলো ভ্যালেন্টে

4
প্রকৃতপক্ষে উইন্ডো.লোকল স্টোরেজ অ্যাট্রিবিউট (কেবল উদাহরণ হিসাবে দেখানো হয়েছে) যাচাই করা যখন কুকি এবং ওয়েবসাইটের ডেটা ব্লক করতে সাফারি সেট আপ করা হয় তখন একটি ত্রুটি ফেলবে। বিশেষত:SecurityError: DOM Exception 18: An attempt was made to break through the security policy of the user agent.
অ্যারনিয়াস

সাফারিতে প্রাইভেট ব্রাউজিং মোড লোকালস্টোরারে লেখার পক্ষে সমর্থন করে না, তবে এই চেকটি সেই ক্ষেত্রেই সত্য ফিরে আসে। আন্ড্রেয়াসের সমাধান এই কেসটি পরিচালনা করে।
দীপক জয়

7

আমি এটি উত্তরগুলিতে দেখতে পেলাম না তবে আমি জেনে রাখা ভাল বলে মনে করি আপনি এ জাতীয় সাধারণ পরীক্ষার জন্য খুব সহজে ভ্যানিলা জেএস বা জিকুয়েরি ব্যবহার করতে পারেন এবং মডার্নিজার যখন অনেক সহায়তা করেন, তা ছাড়া এটির পরিষ্কার সমাধান রয়েছে।

আপনি যদি 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 (_supportsLocalStorage) {
    console.log('ls is supported');
    alert('ls is supported');
}

সুতরাং পুরো ধারণাটি হ'ল যখনই আপনার জাভাস্ক্রিপ্টের বৈশিষ্ট্যগুলির প্রয়োজন হবে, আপনি প্রথমে প্যারেন্ট অবজেক্ট এবং তারপরে আপনার কোডগুলি যে পদ্ধতিগুলি ব্যবহার করেন সেগুলি পরীক্ষা করে।





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

আমি জানি আমি পার্টিতে কিছুটা দেরি করেছি, তবে আমার রান্না করে 'ম্যানেজ_স্টোরেজ.জেএস' নামের একটি ফাইলের মধ্যে ফেলে দিয়েছি এমন কয়েকটি দরকারী কার্যকারিতা রয়েছে। আমি আশা করি তারা আপনার পক্ষে যেমন উপকারী, তেমনি তারা আমার ভাল সেবা করেছে।

মনে রাখবেন: আপনি যে ফাংশনটি সন্ধান করছেন (এটি এই প্রশ্নের উত্তর দেয়) তা isLclStorageAllowed

সুতরাং আরও ado ছাড়া এখানে আমার কোড:

/* 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] */
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.