Получение URL источника перехода с помощью jQuery или Javascript - Проблема с кешем и Referrer URL

24 мар. 2016 г., 18:48:11
Просмотры: 23.6K
Голосов: 0

Надеюсь, кто-нибудь сможет помочь : )

Я пытаюсь получить URL источника первого посещения и отправить его в форму. Мы используем плагин Contact Form 7, поэтому я создал скрытое поле ввода, получаю URL источника и присваиваю это значение скрытому полю.

Все работало отлично, пока я не включил кеширование.

Вот функция, которую я использую (на случай, если кому-то понадобится)

function getRefererPage( $form_tag ){
    if(!isset($_COOKIE['external_referrer_cookie']))
    {

    }
    if ( $form_tag['name'] == 'referer-page' ) {
        $form_tag['values'][] = $_COOKIE['external_referrer_cookie'];
    }
    return $form_tag;
}
add_filter( 'wpcf7_form_tag', 'getRefererPage' );

Где "referer-page" - это имя и ID скрытого поля в форме Contact Form 7.

После включения кеша мне пришлось искать решение на Javascript или jQuery для установки cookie.

Я добавил jQuery Cookie Plugin (https://github.com/carhartl/jquery-cookie) и затем пробовал несколько различных вариаций кода ниже для создания cookie и установки значения cookie.

Моя цель: Когда посетитель впервые приходит на сайт, установить значение cookie равным URL источника перехода, но затем сохранять это значение. Например, если посетитель приходит на сайт с google.com и затем перемещается по страницам сайта, когда он заполняет форму, значение в скрытом поле все еще должно быть URL Google с его параметрами.

Вот JS код, который сейчас находится в footer.php темы.

jQuery(document).ready(function($){  // НАЧАЛО ПОЛЬЗОВАТЕЛЬСКОГО JQUERY БЕЗ КОНФЛИКТОВ
    // $.cookie('mysite_referrer', document.referrer);
    // var initreferrer = document.referrer;
    // $.cookie('mysite_referrer', initreferrer);
    //console.log('текущий cookie ref:'+$.cookie('external_referrer_cookie'));
    //console.log('тестирование');
    $.cookie('external_referrer_cookie');
    if ($.cookie('external_referrer_cookie') == 'undefined' ) { 
        // console.log('установка cookie для'+ document.referrer); 
        $.cookie('external_referrer_cookie', document.referrer);
        $('.wpcf7-text.referer-page').val($.cookie('wsg_external_referrer_cookie'));
        console.log('текущий cookie ref:'+$.cookie('wsg_external_referrer_cookie'));
    }
    // $('#referer-page').val($.cookie('external_referrer_cookie'));
    console.log('текущий cookie вне функции ref:'+$.cookie('external_referrer_cookie'));

    /*
    var cookieName = 'cookietest';
    $(function() {
        checkCookie();
    });

    function checkCookie() {
        if (document.cookie.length > 0 && document.cookie.indexOf(cookieName + '=') != -1) {
                // ничего не делать, cookie уже отправлен
        } else {
                // обработать jQuery анимацию

                // установить cookie, чтобы показать, что пользователь уже посещал
                document.cookie = cookieName + "=1";
        }
    }
    */

}); // КОНЕЦ ПОЛЬЗОВАТЕЛЬСКОГО JQUERY БЕЗ КОНФЛИКТОВ

Как вы можете видеть в закомментированных строках, я пробовал множество подходов, которые нашел в нескольких обучающих материалах. Я борюсь с этим уже пару дней, пожалуйста, помогите : ))

Спасибо

1
Комментарии

Похоже, вы используете более старую версию jQuery Cookie Plugin, так как на странице указано Этот проект был перемещён в https://github.com/js-cookie/js-cookie, поэтому вам, возможно, нужно снова обновить свой код.

Jevuska Jevuska
24 мар. 2016 г. 21:55:51
Все ответы на вопрос 1
6

У меня нет ответа на основе cookie, но я думаю, что это не конфиденциальные данные, вы можете попробовать localStorage.

jQuery(document).ready(function($){
    var initreferrer = document.referrer;
    if(initreferrer.indexOf('yourdomain.com') === -1 ) { // Проверить, является ли реферер вашим сайтом или нет. Если нет (возвращает -1), установить localStorage.
        localStorage.setItem("mysite_referrer", initreferrer);
    }
});

Затем вы можете использовать функцию JavaScript (вместо фильтра, как вы делали), чтобы заполнить ваше скрытое поле сохраненным в localStorage реферером. Мы можем получить его с помощью localStorage.getItem("mystite_referer").

24 мар. 2016 г. 20:42:53
Комментарии

Привет @Tung Du, спасибо за ответ. Можешь подсказать, как я могу заполнить значение скрытого поля с помощью JavaScript? Я пробовал $('.referrer-page').val(localStorage.getItem("mystite_referer")); но это не сработало. Также console.log(localStorage.getItem("mystite_referer")); << выдает NULL в консоли.

Domeniko Domeniko
24 мар. 2016 г. 21:06:39

NULL означает, что localStorage еще не был установлен. Поэтому вы не можете заполнить скрытое поле. Вам нужно изменить условие на ваш домен, чтобы защитить первый реферер. Здесь я пропускаю реферер с вашего сайта. Только внешние сайты. Сначала вы можете закомментировать условие if, чтобы убедиться, что все работает. Также можете сделать console.log(initreferrer) для проверки document.referer для более простой отладки.

Tung Du Tung Du
24 мар. 2016 г. 21:13:51

Мне удалось получить значение в консоли, были некоторые опечатки в коде, например в имени ID и т.д., которые я сначала не заметил. В любом случае, сейчас ситуация следующая. Когда я захожу на сайт из Google, в консоли ничего нет. Если я перехожу на другие страницы, неважно сколько страниц я меняю, в консоли отображается google.com как URL реферера, что отлично! Но console.log пустой при первой загрузке страницы, и другая проблема в том, что я не могу заполнить значение скрытого поля с помощью JS, вот мой код: https://codeshare.io/tiirU

Domeniko Domeniko
24 мар. 2016 г. 21:24:56

Не могли бы вы отправить мне document.referer при первой загрузке страницы?

Tung Du Tung Du
24 мар. 2016 г. 21:32:41

Кажется, у меня получилось, по крайней мере в первых 5 тестах на кешированных страницах всё работает нормально. Вот мой код:

jQuery(document).ready(function($){ var initreferrer = document.referrer; if(initreferrer.indexOf('mydomain.com') === -1 ) { localStorage.setItem('mysite_referrer', initreferrer); } document.getElementById("page-referrer").innerHTML=localStorage.getItem('mysite_referrer'); document.getElementById("page-referrer").value = localStorage.getItem('mysite_referrer'); });

Domeniko Domeniko
24 мар. 2016 г. 22:11:43

Огромное спасибо @Tung Du. Очень ценю вашу помощь! : ))

Domeniko Domeniko
24 мар. 2016 г. 22:12:18
Показать остальные 1 комментариев