Модуль JavaScript Cookie совместно с Require JS и indexOf для работы модуля в Internet Explorer 8 и ниже.
Файл cookie.js
require.config({
paths: {
ie8indexof: 'ie8indexof'
}
});
define(['ie8indexof'], function() {
// Запись новой cookie:
// cookie.set('test', 'test value', 2); // Записывает новую cookie или перезаписывает старую cookie с именем "test" и значением "test value" на 2 дня.
// Запись сессионной cookie:
// cookie.session('test', 'test value', '/'); // Записывает сессионную cookie с именем "test" и значением "test value", которая будет автоматически удалена браузером после закрытия сайта.
// Получение значения cookie:
// cookie.get('test'); // Возвращает значение ("test value") для cookie с именем "test".
// Удаление cookie:
// cookie.remove('test'); // Удаляет сookie с именем "test".
// Удаление всех cookie:
// cookie.clear(); // Удаляет все сookie.
// Проверка возможности записи, чтения и удаления cookie:
// cookie.isEnabled(); // Возвращает "true", если запись, чтение и удаление cookie возможны и "false", если невозможны.
var cookie = {
set: function (name, value, expires, path, domain, secure) {
var newCookie = name + '=' + escape(value) + '; '
, date;
if (expires !== undefined) {
date = new Date();
date.setTime(date.getTime() + (expires * 24 * 60 * 60 * 1000));
newCookie += 'expires=' + date.toGMTString() + '; ';
}
newCookie += (path === undefined) ? 'path=/;' : 'path=' + path + '; ';
newCookie += (domain === undefined) ? '' : 'domain=' + domain + '; ';
newCookie += (secure === true) ? 'secure;' : '';
document.cookie = newCookie;
}
, session: function (name, value, path) {
document.cookie = name + '=' + escape(value) + '; path=' + path;
}
, get: function (name) {
name += '=';
var value = ''
, allCookies = document.cookie.split(';')
, allCookiesLength = allCookies.length
, i;
for (i = 0; i < allCookiesLength; i++) {
while (allCookies[i].charAt(0) === ' ') {
allCookies[i] = allCookies[i].substring(1);
}
if (allCookies[i].indexOf(name) === 0) {
value = allCookies[i].substring(name.length);
}
}
return unescape(value);
}
, remove: function (name) {
cookie.set(name, '', -1);
}
, clear: function () {
var allCookies = document.cookie.split(';')
, allCookiesLength = allCookies.length
, index
, i;
for (i = 0; i < allCookiesLength; i++) {
while (allCookies[i].charAt(0) === ' ') {
allCookies[i] = allCookies[i].substring(1);
}
index = allCookies[i].indexOf('=', 1);
if (index > 0) {
cookie.set(allCookies[i].substring(0, index), '', -1);
}
}
}
, isEnabled: function () {
cookie.set('test_cookie', 'test');
var testResult = (cookie.get('test_cookie') === 'test') ? true : false;
cookie.remove('test_cookie');
return testResult;
}
};
return cookie;
});
Файл ie8indexof.js
define([], function() {
// Добавление метода indexOf для Internet Explorer 6-8
if (!Array.prototype.indexOf) {
Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {
'use strict';
if (this == null) {throw new TypeError();}
var n
, k
, t = Object(this)
, len = t.length >>> 0;
if (len === 0) {return -1;}
n = 0;
if (arguments.length > 1) {
n = Number(arguments[1]);
if (n !== n) { // shortcut for verifying if it's NaN
n = 0;
} else if (n !== 0 && n !== Infinity && n !== -Infinity) {
n = (n > 0 || -1) * Math.floor(Math.abs(n));
}
}
if (n >= len) {return -1;}
for (k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); k < len; k++) {
if (k in t && t[k] === searchElement) {return k;}
}
return -1;
};
}
}
);
Комментариев нет:
Отправить комментарий