1

Web Storage API がサポートされ、利用可能であることを確認する必要があります (セキュリティ上の問題により無効になっている可能性があります)。

したがって、タイプ sessionStorage または localStorage が定義されているかどうかを確認するだけで十分だと思いました。

if (typeof sessionStorage != 'undefined')
{
    alert('sessionStorage available');
}
else
{
    alert('sessionStorage not available');
}

ただし、型が存在する可能性があるかどうか疑問に思っていましたが、Web Storage API を使用することはできませんでした。

備考: Cookie が無効で、sessionStorage または localStorage にアクセスすると、Firefox がセキュリティ エラーをスローすることはわかっています。

4

6 に答える 6

5

Modernizrライブラリを使用して、ローカル ストレージがサポートされているかどうかを検出してみませんか? ブラウザ間の違いはすべて処理されます。その後、次のようなコードを使用できます。

if (Modernizr.localstorage) {
    // browser supports local storage
} else {
    // browser doesn't support local storage
}
于 2011-11-27T12:40:48.437 に答える
4

私はあなたがあなたの元のコードで正しい軌道に乗っていると思います、これをあまりにも凝ったものにする必要はありません。

コードに追加の依存関係を持たないKISSの原則を使用する:

var storageEnabled = function() {
    try {
        sessionStorage.setItem('test-key','test-value');
        if (sessionStorage.getItem('test-key') == 'test-value'){
            return true;
        }
    } catch (e) {};
    return false;
};

alert(storageEnabled() ? 'sessionStorage available' : 'sessionStorage not available');
于 2011-11-28T15:23:48.390 に答える
1
try{
    ssSupport = Object.prototype.toString.call( sessionStorage ) === "[object Storage]";
}
catch(e){
    ssSupport = false;
}
于 2011-11-27T12:41:33.707 に答える
0

したがって、Firefox が Cookie を無効にして使用されている場合 (セキュリティ エラーが発生する場合)、またはその他の独自の (予期しない) 動作が発生する可能性がある場合に、Modernizr.localstorageそれぞれ true を返すためです。Modernizr.sessionstoragewebStorageEnabled

function cookiesEnabled()
{
    // generate a cookie to probe cookie access
    document.cookie = '__cookieprobe=0;path=/';
    return document.cookie.indexOf('__cookieprobe') != -1;
}

function webStorageEnabled()
{
    if (typeof webStorageEnabled.value == 'undefined')
    {
        try
        {
            localStorage.setItem('__webstorageprobe', '');
            localStorage.removeItem('__webstorageprobe');
            webStorageEnabled.value = true;
        }
        catch (e) {
            webStorageEnabled.value = false;
        }
    }

    return webStorageEnabled.value;
}


// conditional

var storage = new function()
{
    if (webStorageEnabled())
    {
        return {
            local:   localStorage,
            session: sessionStorage
        };
    }
    else
    {
        return {
            local: cookiesEnabled() ? function()
            {
                // use cookies here
            }() : null,

            session: function()
            {
                var data = {};

                return {
                    clear: function () {
                        data = {};
                    },

                    getItem: function(key) {
                        return data[key] || null;
                    },

                    key: function(i)
                    {
                        var index = 0;
                        for (var value in data)
                        {
                            if (index == i)
                                return value;
                            ++index;
                        }
                    },

                    removeItem: function(key) {
                        delete data[key];
                    },

                    setItem: function(key, value) {
                        data[key] = value + '';
                    }
                };
            }()
        };
    }
}

これが誰かにも役立つことを願っています。

于 2011-11-27T14:12:00.137 に答える
0

私のバージョン (イントラネット サイトの IE 8 以上で実行されている IE 9 が壊れているため)。

if (typeof (Storage) != "undefined" && !!sessionStorage.getItem) {

}

オブジェクトを格納できるように setObject を追加する長いバージョン:

var sstorage;

if (typeof (Storage) != "undefined" && !!sessionStorage.getItem) {
    Storage.prototype.setObject = function (key, value) {
        this.setItem(key, JSON.stringify(value));
    };

    Storage.prototype.getObject = function (key) {
        return JSON.parse(this.getItem(key));
    };
    if (typeof sessionStorage.setObject == "function") {
        sstorage = sessionStorage;
    }
    else {
        setupOldBrowser();
    }
}
else {
    setupOldBrowser();
}


function setupOldBrowser() {
    sstorage = {};
    sstorage.setObject = function (key, value) {
        this[key] = JSON.stringify(value);
    };
    sstorage.getObject = function (key) {
        if (typeof this[key] == 'string') {
            return JSON.parse(this[key]);
        }
        else {
            return null;
        }
    };

    sstorage.removeItem = function (key) {
        delete this[key];
    };
}
于 2012-03-14T21:57:43.153 に答える
0

利用可能な場合はセッションストレージを使用するために私が行うことは、そうでない場合はCookieを使用することです..

var setCookie; 
var getCookie;

var sessionStorageSupported = 'sessionStorage' in window 
                                   && window['sessionStorage'] !== null;

if (sessionStorageSupported) {
    setCookie = function (cookieName, value) {
        window.sessionStorage.setItem(cookieName, value);
        return value; //you can introduce try-catch here if required
    };
    getCookie = function (cookieName) {
        return window.sessionStorage.getItem(cookieName);
    };
}
else {
    setCookie = function (cookieName, value) {
        $.cookie(cookieName, value);
        return value; // null if key not present
    };
    getCookie = function(cookieName) {
        console.log("using cookies");
        return $.cookie(cookieName);
    };
}
于 2012-07-24T05:10:17.593 に答える