এইচটিএমএল 5 স্থানীয় স্টোরেজ ফ্যালব্যাক সমাধান [বন্ধ]


119

আমি জাভাস্ক্রিপ্ট লাইব্রেরি এবং কোড খুঁজছি যা localStorageএমন ব্রাউজারগুলিতে সীমাবদ্ধ করতে পারে যেগুলির নেটিভ সমর্থন নেই।

মূলত, আমি localStorageডেটা সঞ্চয় করতে ব্যবহার করে আমার সাইট কোড করতে চাই এবং জানি যে এটি এখনও ব্রাউজারগুলিতে কাজ করবে যা এটি স্থানীয়ভাবে সমর্থন করে না। এর অর্থ হ'ল কোনও গ্রন্থাগার window.localStorageউপস্থিত থাকলে সনাক্ত করে এবং এটি থাকলে তা ব্যবহার করবে। যদি এটি বিদ্যমান না থাকে, তবে এটি window.localStorageনেমস্পেসে নিজস্ব বাস্তবায়ন তৈরি করে স্থানীয় স্টোরেজটির এক ধরণের ফ্যালব্যাক পদ্ধতি তৈরি করবে ।

এখনও অবধি, আমি এই সমাধানগুলি পেয়েছি:

  1. সাধারণ অধিবেশন স্টোরেজ বাস্তবায়ন।
  2. এমন একটি বাস্তবায়ন যা কুকিজ ব্যবহার করে (এই ধারণাটি নিয়ে শিহরিত নয়)।
  3. ডোজো মাছের এর dojox.storage , কিন্তু তা নিজের জিনিস, না সত্যিই একটি ফলব্যাক হয়।

আমি বুঝতে পারি যে ফ্ল্যাশ এবং সিলভারলাইট স্থানীয় স্টোরেজগুলির জন্যও ব্যবহার করা যেতে পারে তবে স্ট্যান্ডার্ড এইচটিএমএল 5 লোকাল স্টোরেজের ফ্যালব্যাক হিসাবে এগুলি ব্যবহার করার মতো কিছুই খুঁজে পেল না। গুগল গিয়ার্সেও কি এই ক্ষমতা আছে?

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


সেশনসোজার এবং স্থানীয় স্টোরেজ ওয়েব স্টোরেজ স্পেকের উভয় অংশ ( dev.w3.org/html5/webstores )। কেবলমাত্র পার্থক্য হ'ল ব্রাউজারটি কতক্ষণ ডেটা রাখে। আমি অনুমান করি আপনি এমন একটি বাস্তবায়ন পাবেন না যেখানে আপনার অন্যটি নেই তবে (তবে আমি 100% নিশ্চিত নই)
rlovtang

1
এটি উল্লেখ করার মতো বিষয় যে গত ফেব্রুয়ারিতে গিয়ার্স আনুষ্ঠানিকভাবে বর্ণিত হয়েছিল - আমি এটিতে কোনও নির্মাণ করব না।
josh3736

@ আরলভতাং: ধন্যবাদ, আমি অধিবেশন এবং স্থানীয় স্টোরেজের মধ্যে পার্থক্য সম্পর্কে অবগত। 24ways.org আর্টিকেল অনুসারে (প্রশ্নের প্রথম লিঙ্ক, সমাধান # 1), ক্রোম কেবল লোকালস্টোরেশন সমর্থন করে, সেশনস্টোরেশন নয়। এই আর্টিকেলটি সম্ভবত কিছুটা আগে লেখা হয়েছিল বলে সম্ভবত এটি আর নেই।
তৌরেন

@ জোশ ৩৩736: হ্যাঁ, আমি ব্যক্তিগতভাবে কুকিজ এবং গিয়ার ব্যবহার এড়াতে চাই। আমি অবশ্যই এটির উপর নির্ভরশীল কোনও কিছুই তৈরি করব না, তবে যদি এটি ইনস্টল করা কারওর জন্য যদি ফ্যালব্যাক স্টোরেজ মেকানিজম হয় এবং আমি এটির সরাসরি কোড না করি তবে এটি ব্যবহার করা যেতে পারে।
টুরেন

সুতরাং আমি আসলে ভুল ছিলাম :) জানেন না যে একবার ক্রোমের লোকালস্টোরেজের জন্য সমর্থন ছিল তবে সেশনস্টোরেজ নয়। কমপক্ষে এখন উভয়ের জন্য ক্রোমের সমর্থন রয়েছে।
rlovtang

উত্তর:


56

আমি পার্সিস্টজেএস ( গিথুব সংগ্রহশালা ) ব্যবহার করি , যা ক্লায়েন্ট-সাইড স্টোরেজটি আপনার কোডে নির্বিঘ্নে এবং স্বচ্ছভাবে পরিচালনা করে। আপনি একটি একক এপিআই ব্যবহার করেন এবং নিম্নলিখিত ব্যাকেন্ডের জন্য সমর্থন পান:

  • ফ্ল্যাশ: ফ্ল্যাশ 8 ধ্রুব স্টোরেজ।
  • গিয়ার্স: গুগল গিয়ার্স-ভিত্তিক স্থির স্টোরেজ।
  • স্থানীয় স্টোরেজ: এইচটিএমএল 5 খসড়া স্টোরেজ।
  • whatswg_db: HTML5 খসড়া ডাটাবেস স্টোরেজ।
  • গ্লোবাল স্টোরেজ: এইচটিএমএল 5 খসড়া স্টোরেজ (পুরানো অনুমান)।
  • যেমন: ইন্টারনেট এক্সপ্লোরার ইউজারডটা আচরণ beha
  • কুকি: কুকি ভিত্তিক স্থির স্টোরেজ।

এর মধ্যে যে কোনওটি অক্ষম করা যায় — যদি উদাহরণস্বরূপ, আপনি কুকি ব্যবহার করতে না চান। এই লাইব্রেরির সাহায্যে আপনি IE 5.5+, ফায়ারফক্স 2.0+, সাফারি 3.1+ এবং ক্রোমে স্থানীয় ক্লায়েন্ট-সাইড স্টোরেজ সমর্থন পাবেন; এবং ব্রাউজারে ফ্ল্যাশ বা গিয়ারস থাকলে প্লাগইন-সহিত সহায়তা। আপনি যদি কুকি সক্ষম করেন তবে এটি সবকিছুতে কাজ করবে (তবে 4 কেবি পর্যন্ত সীমাবদ্ধ থাকবে)।


10
পার্সিস্টজেএস এখনও সমর্থিত? আমি ভাবছি যে এটি ব্রাউজার আপগ্রেড হওয়ার সাথে সাথে চয়ন করা স্টোরেজ পদ্ধতি পরিবর্তিত হয় (স্থানীয় সঞ্চয়স্থান উপলব্ধ হয়ে যায়) যেখানে কোনও সমস্যার সমাধান করে। পুরানো অবস্থান কি অ্যাক্সেসযোগ্য হয়ে যায়?
jcalfi314

2
এটি সক্রিয় বিকাশে কমপক্ষে দেখায় না।
মাহন

এটি একটি খুব সাহসী লাইব্রেরি। সর্বাধিক প্রযুক্তিতে সর্বোচ্চ-আকার সম্পর্কে কোনও জ্ঞান ছাড়াই আমাদের এ বিষয়টি নিশ্চিত করা উচিত যে আমাদের অ্যাপটি অনেক ভাগ্যের সাথে চলে ... এছাড়াও আপনি যদি <64 কেবি সংরক্ষণ করতে চান তবে এটি কেবল একটি সমাধান বলে মনে হয়।
শহরবাসী

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

আপনি কি জানেন যে এটি সাফারি বেসরকারী ব্রাউজিং মোডের সাথে কাজ করে? বর্তমানে আমার একটি সমস্যা রয়েছে যেখানে সাফারি প্রাইভেট ব্রাউজিং ম্যাকস এবং আইওএস উভয়তে লোকালস্টোরেশন সমর্থিত নয়।
অস্টিন

61

খাঁটি জেএস ভিত্তিক সাধারণ স্থানীয় স্টোরেজ পলফিল:

ডেমো: http://jsfiddle.net/aamir/S4X35/

এইচটিএমএল:

<a href='#' onclick="store.set('foo','bar')">set key: foo, with value: bar</a><br/>
<a href='#' onclick="alert(store.get('foo'))">get key: foo</a><br/>
<a href='#' onclick="store.del('foo')">delete key: foo</a>​

জাতীয়:

window.store = {
    localStoreSupport: function() {
        try {
            return 'localStorage' in window && window['localStorage'] !== null;
        } catch (e) {
            return false;
        }
    },
    set: function(name,value,days) {
        if (days) {
            var date = new Date();
            date.setTime(date.getTime()+(days*24*60*60*1000));
            var expires = "; expires="+date.toGMTString();
        }
        else {
            var expires = "";
        }
        if( this.localStoreSupport() ) {
            localStorage.setItem(name, value);
        }
        else {
            document.cookie = name+"="+value+expires+"; path=/";
        }
    },
    get: function(name) {
        if( this.localStoreSupport() ) {
            var ret = localStorage.getItem(name);
            //console.log(typeof ret);
            switch (ret) {
              case 'true': 
                  return true;
              case 'false':
                  return false;
              default:
                  return ret;
            }
        }
        else {
            // cookie fallback
            /*
             * after adding a cookie like
             * >> document.cookie = "bar=test; expires=Thu, 14 Jun 2018 13:05:38 GMT; path=/"
             * the value of document.cookie may look like
             * >> "foo=value; bar=test"
             */
            var nameEQ = name + "=";  // what we are looking for
            var ca = document.cookie.split(';');  // split into separate cookies
            for(var i=0;i < ca.length;i++) {
                var c = ca[i];  // the current cookie
                while (c.charAt(0)==' ') c = c.substring(1,c.length);  // remove leading spaces
                if (c.indexOf(nameEQ) == 0) {  // if it is the searched cookie
                    var ret = c.substring(nameEQ.length,c.length);
                    // making "true" and "false" a boolean again.
                    switch (ret) {
                      case 'true':
                          return true;
                      case 'false':
                          return false;
                      default:
                          return ret;
                    }
                }
            }
            return null; // no cookie found
        }
    },
    del: function(name) {
        if( this.localStoreSupport() ) {
            localStorage.removeItem(name);
        }
        else {
            this.set(name,"",-1);
        }
    }
}​

4
কেন এটি স্বীকৃতি পাচ্ছে না !? ধন্যবাদ মানুষ!
রবার্ট

4
:) - আমি আমার যা প্রয়োজন তার জন্য একটি সম্পূর্ণ লিবিব যুক্ত করতে পছন্দ করি না।
আমির আফ্রিদি

2
এটি কি জাভাস্ক্রিপ্টে var expiresস্থানীয়ভাবে এবং তারপরে অন্য ক্ষেত্রের ব্যবহারকারীকে সংজ্ঞায়িত করার অনুমতি রয়েছে ? ফাংশনেset
শুভ_মর্মোসেট

3
কেবল উল্লেখ করতে চেয়েছিলেন যে আপনি যখন কুকিতে একটি মেয়াদ নির্ধারণের অনুমতি দিচ্ছেন তখন লোকালস্টোরেজ কখনও শেষ হবে না। আপনি যদি কোনও মেয়াদ শেষ হওয়ার জন্য সন্ধান করছেন তবে এটি কিছু সমস্যার কারণ হতে পারে। স্থানীয় স্টোরেজে মেয়াদোত্তীকরণের তারিখ যুক্ত করা এবং এটি এখনও প্রযোজ্য কিনা তা দেখার জন্য তারিখের তুলনা তৈরি করা উপকারী হতে পারে। অবশ্যই আমি তর্ক করব যে আপনার যদি মেয়াদোত্তীর্ণ হওয়ার প্রয়োজন হয় তবে আপনার কেবল একটি কুকি ব্যবহার করা উচিত। তবে আমি মনে করি এই স্ক্রিপ্টটি উভয় ক্ষেত্রেই বর্তমানে অসম্পূর্ণ হওয়ার চেয়ে বরং মেয়াদোত্তীর্ণ হওয়া বা এটির অনুমতি দেওয়া উচিত নয়।
হান্না

1
@ মোহসিনসাইদ বেসরকারী মোডে, আমার মনে হয় ব্রাউজার আপনাকে কুকি তৈরি করতে দেয় না। superuser.com/questions/589248/…
আমির আফ্রিদি

19

মডার্নিজর উইকিতে আপনি পলিফিল পৃষ্ঠাটি দেখেছেন?

https://github.com/Modernizr/Modernizr/wiki/HTML5-Cross-browser-Polyfills

সেই পৃষ্ঠায় ওয়েব স্টোরেজ বিভাগটি সন্ধান করুন এবং আপনি 10 টি সম্ভাব্য সমাধান (জুলাই ২০১১ পর্যন্ত) দেখতে পাবেন।

শুভকামনা! ছাপ


1
দেখে মনে হচ্ছে যে এগুলির মধ্যে কেউই ব্যক্তিগত / ছদ্মবেশী মোডে কাজ করছেন না (যেমন: সাফারি বা ক্রোম), কারণ তাদের কাজের দিক থেকে কুকিজ তৈরি হচ্ছে, যা সেই মোডে অক্ষমও রয়েছে।
অ্যালেক্স ক্লাউস

14

নীচে আমির আফ্রিদির প্রতিক্রিয়ার একটি পরিচ্ছন্ন সংস্করণ দেওয়া আছে যা এর সমস্ত কোড স্থানীয় আওতায় রাখে।

আমি এমন একটি রেফারেন্স সরিয়ে দিয়েছি যা একটি বৈশ্বিক retপরিবর্তনশীল তৈরি করে এবং সংরক্ষণযোগ্য "ট্রু" এবং "মিথ্যা" স্ট্রিংগুলির পার্সিংকে BrowserStorage.get()মেথডের মধ্যে বুলিয়ান মানগুলিতে বিভক্ত করে ফেলেছে , যদি কেউ সত্যিকারের স্ট্রিংগুলিকে "সত্য" সংরক্ষণ করার চেষ্টা করে তবে সমস্যা হতে পারে "FALSE"।

যেহেতু স্থানীয় স্টোরেজ এপিআই কেবল স্ট্রিং মানগুলিকে সমর্থন করে, তারপরে কেউ জাভাস্ক্রিপ্ট ভেরিয়েবল ডেটা সংরক্ষণ করতে পারে এবং উপযুক্ত তথ্য প্রকারের সাথে এনকোড করে জেএসওএন স্ট্রিংয়ে ডেটা ডেকে আনে, যা জেএসএন এনকোড / ডিকোড লাইব্রেরি যেমন https ব্যবহার করে ডিকোড করা যায় : //github.com/douglascrockford/JSON-js

var BrowserStorage = (function() {
    /**
     * Whether the current browser supports local storage as a way of storing data
     * @var {Boolean}
     */
    var _hasLocalStorageSupport = (function() {
        try {
            return 'localStorage' in window && window['localStorage'] !== null;
        } catch (e) {
            return false;
        }
    })();

    /**
     * @param {String} name The name of the property to read from this document's cookies
     * @return {?String} The specified cookie property's value (or null if it has not been set)
     */
    var _readCookie = function(name) {
        var nameEQ = name + "=";
        var ca = document.cookie.split(';');
        for (var i = 0; i < ca.length; i++) {
            var c = ca[i];
            while (c.charAt(0) == ' ') c = c.substring(1, c.length);
            if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
        }

        return null;
    };

    /**
     * @param {String} name The name of the property to set by writing to a cookie
     * @param {String} value The value to use when setting the specified property
     * @param {int} [days] The number of days until the storage of this item expires
     */
    var _writeCookie = function(name, value, days) {
        var expiration = (function() {
            if (days) {
                var date = new Date();
                date.setTime(date.getTime() + (days*24*60*60*1000));
                return "; expires=" + date.toGMTString();
            }
            else {
                return "";
            }
        })();

        document.cookie = name + "=" + value + expiration + "; path=/";
    };

    return {
        /**
         * @param {String} name The name of the property to set
         * @param {String} value The value to use when setting the specified property
         * @param {int} [days] The number of days until the storage of this item expires (if storage of the provided item must fallback to using cookies)
         */
        set: function(name, value, days) {
            _hasLocalStorageSupport
                ? localStorage.setItem(name, value)
                : _writeCookie(name, value, days);
        },

        /**
         * @param {String} name The name of the value to retrieve
         * @return {?String} The value of the 
         */
        get: function(name) {
            return _hasLocalStorageSupport
                ? localStorage.getItem(name) 
                : _readCookie(name);
        },

        /**
         * @param {String} name The name of the value to delete/remove from storage
         */
        remove: function(name) {
            _hasLocalStorageSupport
                ? localStorage.removeItem(name)
                : this.set(name, "", -1);
        }
    };
})();

10

আমি ব্যক্তিগতভাবে amplify.js পছন্দ করি । এটি অতীতে আমার জন্য সত্যই ভাল কাজ করেছে এবং আমি এটি স্থানীয় সমস্ত স্টোরেজ প্রয়োজনীয়তার জন্য সুপারিশ করেছি।

আইই 5+, ফায়ারফক্স 2+, সাফারি 4+, ক্রোম, অপেরা 10.5+, আইফোন 2+, অ্যান্ড্রয়েড 2+ সমর্থন করে এবং স্টোরেজ ক্রস ব্রাউজার পরিচালনা করার জন্য একটি সামঞ্জস্যপূর্ণ API সরবরাহ করে


3

store.js অন্যান্য ব্রাউজারে ব্যবহারকারী ডেটা এবং আইআই এবং লোকালস্টোরেশন ব্যবহার করে।

  • এটি খুব জটিল কিছু করার চেষ্টা করে না

  • কোনও কুকিজ নেই, ফ্ল্যাশ নেই, কোনও জিকুয়ের প্রয়োজন নেই।

  • ক্লিন এপিআই

  • 5 কেবি সংকুচিত

https://github.com/marcuswestin/store.js



1

লনচেয়ারটিও একটি ভাল বিকল্প বলে মনে হচ্ছে

একটি লনচেয়ার ছোট এবং বাইরে ছাড়া একটি পালঙ্ক মত বাছা হয়। এইচটিএমএল 5 মোবাইল অ্যাপ্লিকেশনগুলির জন্য উপযুক্ত যাগুলির জন্য একটি হালকা ওজনের, অভিযোজিত, সহজ এবং মার্জিত দৃistence়তার সমাধান প্রয়োজন।

  • সংগ্রহ। একটি লনচেয়ার দৃষ্টান্ত সত্যই কেবলমাত্র বস্তুর অ্যারে।
  • অভিযোজক অধ্যবসায়। অন্তর্নিহিত স্টোরটি একটি সামঞ্জস্যপূর্ণ ইন্টারফেসের পিছনে বিমূর্ত করা হয়।
  • প্লাগযোগ্য সংগ্রহের আচরণ। কখনও কখনও আমাদের সংগ্রহে সহায়ক প্রয়োজন তবে সর্বদা নয়।

0

নেই realstorage , যা একটি ফলব্যাক হিসাবে গিয়ার্স ব্যবহার করে।


ধন্যবাদ। দুর্ভাগ্যক্রমে, দেখে মনে হচ্ছে এটি @ josh3736 এর পারসিস্টজেএসের পরামর্শের চেয়ে কম ব্রাউজারকে সমর্থন করবে। আমি এখনও এটি একবার পর্যালোচনা করব, এবং পরামর্শ প্রশংসা করব।
তৌরেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.