Задать вопрос
I-marketing
@I-marketing
Комплексный маркетинг и оптимизация отдела продаж.

Как сделать JS, что бы он запускался только при первом визите на сайт?

На сайте стоит такой скрипт:
<script type="text/javascript">
    setTimeout('yaCounterХХХХХХХХ.reachGoal("TIME");', 30000);
</script>


Срабатывает при каждом обновлении страницы. Нужно после первого визита юзера как то пометить в куке что код уже сработал, и что бы при последующих его визитах этот код уже не запускался.

Буду очень благодарен за пример конечного варианта скрипта, так как в JS не шарю.
  • Вопрос задан
  • 116 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Код ждёт 30 секунд, прежде, чем отправить в Яндекс.Метрику событие.

Если надо, чтобы единственный раз именно дождался 30 секунд на странице, то так:
const KEY = 'TIMECOUNTER';

if (!localStorage.getItem(KEY)) {
  setTimeout(() => {
    yaCounterХХХХХХХХ.reachGoal('TIME');
    localStorage.setItem(KEY, KEY);
  }, 30000);
}


Ещё возможно, что единственный раз должна лишь даваться попытка провести 30 секунд на сайте. Тогда стоило задавать вопрос более осмысленно.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
ThunderCat
@ThunderCat Куратор тега JavaScript
{PHP, MySql, HTML, JS, CSS} developer
иф (кука есть) {
 ретурн 
}
елс{
выполнять скрипт;
записать в куки;
}
Ответ написан
ronnie85
@ronnie85
Fullstack Dev
Могу предложить свой API по работе с Cookie:
var Cookie = {

    _params: {
        domain: '',
        path: '/',
        expires: '',
        maxAge: -1,
        sameSite: false,
        secure: false
    },

    _lastCookie: '',

    setDefaultParams (params) {
        this._params = {...this._params, ...params};
    },

    getDefaultParams () {
        return this._params;
    },

    getLastCookie () {
       return this._lastCookie;
    },

    set (key, value, params={}) {

        value = encodeURIComponent(value);
        params = {...this._params, ...params};

        if (params.expires) {
            if (params.expires instanceof Date) {
                params.expires = params.expires.toUTCString();
            } else if (typeof params.expires === 'string') {
                const date = new Date(params.expires);
                params.expires = date.toUTCString();
            }
        }

        let cookie = `${key}=${value};`;
        cookie += params.path ? ` Path=${params.path};` : '';
        cookie += params.domain ? ` Domain=${params.domain};` : '';
        cookie += params.expires ? ` Expires=${params.expires};` : '';
        cookie += params.maxAge > -1 ? ` Max-Age=${params.maxAge};` : '';
        cookie += params.sameSite !== false ? ` SameSite=${params.sameSite};` : '';
        cookie += params.secure === true ? ` Secure;` : '';

        this._lastCookie = cookie;
        document.cookie = cookie;

        return true;
    },

    has (key) {
        return this.getAll().hasOwnProperty(key);
    },

    get (key) {
        return this.getAll()[key];
    },

    getAll () {
        const cookies = {};
        this.getString().split(';').forEach(val => {
            const params = val.split('=').map(el => el.trim());
            cookies[params[0]] = params[1];
        });
        return cookies;
    },

    getString () {
        return document.cookie;
    },

    delete (key) {
        if (!this.has(key)) return false;
        return this.set(key, '', { expires: 'Thu, 01 Jan 1970 00:00:01 GMT', maxAge: 0 });
    }
    
};

if (!Cookie.has('key')) {
    if (confirm('Are you want to save a cookie?')) {
        Cookie.set('key', true, { expires: '2022-12-01T00:00:00' });
    }
} else {
    if (confirm('Are you want to delete a cookie?')) {
        Cookie.delete('key');
    }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
Rocket Смоленск
от 80 000 до 130 000 ₽
div. Ставрополь
от 40 000 до 90 000 ₽
Wanted. Санкт-Петербург
До 220 000 ₽
18 дек. 2024, в 13:47
2000 руб./в час
18 дек. 2024, в 13:22
30000 руб./за проект
18 дек. 2024, в 12:37
10000 руб./за проект