1

我有一个为该域写入 cookie 的应用程序。此 cookie 中有很多信息,但没有任何敏感信息。它存储的值之一是我想检索的“DisplayFullName”。

我已经搜索了一段时间,发现了许多允许您读取 cookie(其中的所有值)的代码示例,但没有专门允许您读取特定值的代码示例。我确实找到了一个 jquery 示例,但这看起来像是在循环遍历这些值。但是我的 cms 没有安装 jquery,所以想用老式的方式来做。

这是我必须读取 cookie 的代码,它似乎工作正常。我只需要阅读具体的价值。有人可以帮助或指出我正确的方向吗?

function getCookie(name)
{
  var re = new RegExp(name + "=([^;]+)");
  var value = re.exec(document.cookie);
  return (value != null) ? unescape(value[1]) : null;
}

alert(getCookie("ecm"));

我想最终将 DisplayFullName 添加到我调用 MyIframe 作为参数的 iframe id 的 src 中。

4

2 回答 2

1

我对你的建议是根本不要使用 cookie。使用localStorage界面,它具有更加用户友好的语法。

例如:

localStorage['ecm'] = 'some value';
alert(localStorage['ecm']);

由于它只是一个 Javascript 对象,因此您还可以使用点表示法:

localStorage.ecm = 'some value';
alert(localStorage.ecm);

这仅在现代浏览器中原生存在。如果向后兼容性很重要,那么有各种可用的 shim,例如这个,它使所有使用幕后老式 cookie 的浏览器都可以使用该功能。

于 2013-06-05T15:50:26.907 回答
0

这对你有用。它只是在 cookie 上循环查找您传入的名称。

function getCookieByName(name) {
    var cookies = document.cookie.split(";"),
        yerCookie = null,
        cookiePair;

    for (var i=0; i < cookies.length; i++) {
        cookiePair = cookies[i].split("=");
        if (cookiePair[0].trim() === name) {
            yerCookie = cookiePair.slice(1).join("=");
            break;
        }
    }

    return yerCookie;
}

或者您可以使用从这里复制的这个不错的功能:

function readCookie(name) {
    var nameEQ = name + "=",
        ca = document.cookie.split(';'),
        i, c;

    for (i=0; i < ca.length; i++) {
        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;
}

获得 ecm cookie 后,使用以下内容对其进行解析:

function getECMCookieProperty(ecmCookie, prop) {

    if (!ecmCookie) {
        return undefined;
    }

    var props = ecmCookie.split("&"),
        result = null,
        propList;

    for (var i=0;i<props.length;i++){
        propList = props[i].split("=");
        if (propList[0] === prop) {
            result = unescape(propList[1]);
            break;
        }
    }
    return result;
}

要使用这些,请执行以下操作:

var ecmCookie = getCookieByName("ecm");
var displayFullName = getECMCookieProperty(ecmCookie, "DisplayFullName");
alert(displayFullName)
于 2013-06-05T15:51:07.827 回答