Поддержка Angular 4 Cookie для Mi4 ( Android v5)

У меня есть служба cookie, которая используется в качестве запасного варианта для localalstorage .ie, если localstorage не найден на устройстве, тогда мое приложение использует файлы cookie, использующие этот сервис. Похоже, работает для настольных браузеров во всех ОС. Однако это не работает для мобильного браузера, особенно в MiUi4 с Chrome 60 и Android 5. Мой сервис cookie выглядит следующим образом. Есть ли какая-то конкретная реализация для устройств Mi на уровне браузера.

import {Injectable} from '@angular/core';

@Injectable()

export class CookieService {

public check(name: string): boolean {
    if (typeof document === "undefined") return false;  // Check if document exist avoiding issues on server side prerendering
    name = encodeURIComponent(name);
    let regexp = new RegExp('(?:^' + name + '|;\\s*' + name + ')=(.*?)(?:;|$)', 'g');
    let exists = regexp.test(document.cookie);
    return exists;
}

public get(name: string): string {
    if (this.check(name)) {
        name = encodeURIComponent(name);
        let regexp = new RegExp('(?:^' + name + '|;\\s*' + name + ')=(.*?)(?:;|$)', 'g');
        let result = regexp.exec(document.cookie);
        return decodeURIComponent(result[1]);
    } else {
        return null;
    }
}

public getAll(): any {
    let cookies: any = {};

    // tslint:disable-next-line:triple-equals
    if (document.cookie && document.cookie != '') {
        let split = document.cookie.split(';');
        for (let s of split) {
            let currCookie = s.split('=');
            currCookie[0] = currCookie[0].replace(/^ /, '');
            cookies[decodeURIComponent(currCookie[0])] = decodeURIComponent(currCookie[1]);
        }
    }

    return cookies;
}

public set(name: string, value: string, expires?: number | Date, path?: string, domain?: string, secure?: boolean) {
    let cookieStr = encodeURIComponent(name) + '=' + encodeURIComponent(value) + ';';

    if (expires) {
        if (typeof expires === 'number') {
            let dtExpires = new Date(new Date().getTime() + expires * 1000 * 60 * 60 * 24);
            cookieStr += 'expires=' + dtExpires.toUTCString() + ';';
        } else {
            cookieStr += 'expires=' + expires.toUTCString() + ';';
        }
    }

    if (path) {
        cookieStr += 'path=' + path + ';';
    }
    if (domain) {
        cookieStr += 'domain=' + domain + ';';
    }
    if (secure) {
        cookieStr += 'secure;';
    }

    // console.log(cookieStr);
    document.cookie = cookieStr;
}

public delete(name: string, path?: string, domain?: string): void {
    this.set(name, '', -1, path, domain);
}


public deleteAll(path?: string, domain?: string): void {
    let cookies: any = this.getAll();

    for (let cookieName of Object.keys(cookies)) {
        this.delete(cookieName, path, domain);
    }

}

}

0 ответов

Другие вопросы по тегам