4

私は、Javacriptに基づいており、Phonegap / Applaudを使用してアプリになっているAndroid(およびできれば後でiPhone)用のアプリを持っています。

残念ながら、Cookieの設定と取得はAndroidで機能しません。これは、Android環境に特有の可能性があります。「ローカルストレージ」を使用する方が信頼性が高いとアドバイスされました。

しかし、今朝までローカルストレージについて何も知らなかったので、知り合いになるのに苦労しています。私が収集したものから、それは基本的に異なる構文でデータを保存するための単なる別の場所です。私の状況では、Androidが私にそれを使用するように強制しているという事実以外に、それが私にクッキーよりも利点を与えるとは思わない。結果として、Cookieの設定と取得に既存のコードを引き続き活用でき、まったく新しいアプローチをとる必要がないことを望んでいます。

確かに、Javascriptでテストを実行して、ローカルストレージがあるかどうかを確認できます。ローカルストレージがある場合は、そこにCookieデータを保存して取得します。ない場合は、通常どおりCookieを使用しますか?

注1: Stack Overflowで同様の質問を検索しました。最初はまさに​​私が話しているように見える質問がありましたが、簡潔すぎるため、解析して何をすべきかを知ることができません。また、私が持っているとは思わないライブラリやコードの存在を前提としていると思います。私もこの質問を見ましたが、私が求めているのとは逆のことをしていると思います。

注2:これはCookieを取得および設定するための現在のコードです(Web上のどこかから取得しました。Androidの問題が発生するまでは、信頼性が非常に高いものでした)。

function getCookie(c_name)
{
    var c_start = document.cookie.indexOf(c_name + "=");

    if (document.cookie.length > 0)
    {
        if (c_start !== -1)
        {
            return getCookieSubstring(c_start, c_name);
        }
    }
    return "";
}

function setCookie(c_name, value, expiredays)
{
        var exdate = new Date();
        exdate.setDate(exdate.getDate() + expiredays);
        document.cookie = c_name + "=" + escape(value) +
        ((expiredays === null) ? "" : ";expires=" + exdate.toUTCString());
        alert("this is document.cookie: " + document.cookie);
}
4

3 に答える 3

7

http://diveintohtml5.info/storage.htmlをご覧ください。歴史はまったく興味深いものではないかもしれませんが、少なくとも、さらに読むセクションの他のチュートリアルへの優れたリンクリストを提供します。

さて、あなたのコードに移りましょう。最初に言及することlocalStorageは、有効期限がないことです-それは永続的です(ユーザーが手動ですべてをクリーンアップするまで)。より短いストレージを使用したい場合sessionStorageは、同じインターフェースを持つがブラウザが閉じられるまでしか持続しないを使用することもできます。

コードの言い換えは簡単です。

function getCookie(c_name) {
    return localStorage.getItem(c_name);
}

function setCookie(c_name, value, expiredays) {
    return localStorage.setItem(c_name, value);
}
于 2012-05-25T01:22:16.137 に答える
2

私は他の回答の情報を使用したので、これは別の回答ではありませんが、私が最終的に得た完全なコードを見ることが他の人に役立つと思っただけです。これは、Cookieを使用する代わりに(私が行ったように)ほとんどドロップインできます。ローカルストレージをテストし、存在する場合はそれを使用し、存在しない場合はCookieを使用します。

実装するときにアラートを削除することをお勧めします。

function getCookie(c_name)
{
    if(typeof localStorage != "undefined")
    {
        return localStorage.getItem(c_name);
    }
    else
    {
        var c_start = document.cookie.indexOf(c_name + "=");
        if (document.cookie.length > 0)
        {
            if (c_start !== -1)
            {
                return getCookieSubstring(c_start, c_name);
            }
        }
        return "";
    }
}

function setCookie(c_name, value, expiredays)
{
    var exdate = new Date();
    exdate.setDate(exdate.getDate() + expiredays);
    if(typeof localStorage != "undefined")
    {
        alert("This place has local storage!");
        localStorage.setItem(c_name, value);
    }
    else
    {
        alert("No local storage here");
        document.cookie = c_name + "=" + escape(value) +
        ((expiredays === null) ? "" : ";expires=" + exdate.toUTCString());
    }
}
于 2012-05-25T01:51:57.407 に答える
2

localStorage通常のオブジェクトとまったく同じように動作します。

localStorage.somekey = "My data"; // set
alert(localStorage.somekey); // get
delete localStorage.somekey; // unset

localStorage他のオブジェクトとの唯一の本当の違いは、それが永続的であるということです。同じオリジンのページはすべてオブジェクトの値にアクセスでき、ブラウザを閉じても存続します。

リクエストごとにサーバーに送信されるわけではないため、データストレージのあらゆる点でCookieよりも優れています(ただし、Cookieが役に立たないというわけではありません。どちらにも利点があります)。

それは本当に簡単です;)

于 2012-05-25T01:15:42.527 に答える