URL Referrer cu jQuery sau Javascript - Problemă Cache și URL Referrer

24 mar. 2016, 18:48:11
Vizualizări: 23.6K
Voturi: 0

Sper că mă poate ajuta cineva : )

Ceea ce încerc să fac este să obțin referrer-ul primei vizite și să-l trimit către formular. Folosim plugin-ul Contact form 7, așa că am creat un câmp ascuns, obțin URL-ul referrer și atribui acea valoare câmpului ascuns.

Totul a funcționat bine până când am activat cache-ul.

Aceasta este funcția pe care o folosesc (în caz că va avea cineva nevoie de ea)

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' );

Unde "referer-page" este numele și ID-ul câmpului ascuns din formularul Contact Form 7.

Odată ce am activat cache-ul, a trebuit să mă gândesc la o soluție Javascript sau jQuery pentru a seta cookie-ul.

Am adăugat jQuery Cookie Plugin (https://github.com/carhartl/jquery-cookie) și apoi am încercat mai multe variante diferite ale codului de mai jos pentru a crea un cookie și a seta valoarea acestuia.

Obiectivul meu este: Când vizitatorul website-ului vine pentru prima dată, să setez valoarea cookie-ului la URL-ul referrer, dar apoi să păstrez valoarea, de exemplu dacă vizitatorul vine pe website de pe google.com și apoi navighează prin paginile website-ului, când completează formularul, valoarea din câmpul ascuns ar trebui să fie tot URL-ul de google cu parametrii săi.

Acesta este codul JS pe care îl am acum în footer.php al temei.

jQuery(document).ready(function($){  // ÎNCEPUT JQUERY PERSONALIZAT FĂRĂ CONFLICT
    // $.cookie('mysite_referrer', document.referrer);
    // var initreferrer = document.referrer;
    // $.cookie('mysite_referrer', initreferrer);
    //console.log('referrer cookie curent:'+$.cookie('external_referrer_cookie'));
    //console.log('testare');
    $.cookie('external_referrer_cookie');
    if ($.cookie('external_referrer_cookie') == 'undefined' ) { 
        // console.log('setare cookie pentru'+ document.referrer); 
        $.cookie('external_referrer_cookie', document.referrer);
        $('.wpcf7-text.referer-page').val($.cookie('wsg_external_referrer_cookie'));
        console.log('referrer cookie curent:'+$.cookie('wsg_external_referrer_cookie'));
    }
    // $('#referer-page').val($.cookie('external_referrer_cookie'));
    console.log('referrer cookie în afara funcției:'+$.cookie('external_referrer_cookie'));

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

    function checkCookie() {
        if (document.cookie.length > 0 && document.cookie.indexOf(cookieName + '=') != -1) {
                // nu face nimic, cookie-ul a fost deja trimis
        } else {
                // gestionează animația jQuery

                // setează cookie-ul pentru a arăta că utilizatorul a vizitat deja
                document.cookie = cookieName + "=1";
        }
    }
    */

}); // SFÂRȘIT JQUERY PERSONALIZAT FĂRĂ CONFLICT

După cum puteți vedea în liniile comentate, am încercat multe abordări pe care le-am găsit în mai multe tutoriale de pe diferite site-uri. M-am chinuit cu asta câteva zile, vă rog să mă ajutați : ))

Mulțumesc

1
Comentarii

Se pare că folosești o versiune mai veche a jQuery Cookie Plugin, așa cum menționează pagina Acest proiect a fost mutat pe https://github.com/js-cookie/js-cookie, deci poate ar trebui să îți actualizezi codul din nou.

Jevuska Jevuska
24 mar. 2016 21:55:51
Toate răspunsurile la întrebare 1
6

Nu am răspunsul construit pe cookie, dar cred că acesta nu reprezintă o informație sensibilă, poți încerca cu localStorage.

jQuery(document).ready(function($){
    var initreferrer = document.referrer;
    if(initreferrer.indexOf('yourdomain.com') === -1 ) { // Verifică dacă referrer-ul este de pe site-ul tău sau nu. Dacă nu (returnează -1), setează localStorage.
        localStorage.setItem("mysite_referrer", initreferrer);
    }
});

Apoi poți folosi o funcție JavaScript (în loc de un filtru cum ai făcut) pentru a completa câmpul tău ascuns cu referrer-ul salvat în localStorage-ul browserului. Îl putem obține prin localStorage.getItem("mystite_referer").

24 mar. 2016 20:42:53
Comentarii

Salut @Tung Du, mulțumesc pentru răspuns. Poți să-mi spui te rog cum aș putea completa valoarea câmpului ascuns cu JavaScript? Am încercat $('.referrer-page').val(localStorage.getItem("mystite_referer")); dar nu a funcționat. De asemenea, console.log(localStorage.getItem("mystite_referer")); << returnează valoarea NULL în consolă.

Domeniko Domeniko
24 mar. 2016 21:06:39

NULL înseamnă că localStorage nu a fost setat încă. Așadar nu poți completa câmpul ascuns. Trebuie să modifici domeniul în condiție pentru a proteja primul referer. Aici am sărit peste refererul de pe site-ul tău. Doar în afara site-ului tău. Poți mai întâi să comentezi condiția if pentru a te asigura că totul funcționează. Poți de asemenea să folosești console.log(initreferrer) pentru a verifica document.referer pentru depanare mai ușoară.

Tung Du Tung Du
24 mar. 2016 21:13:51

Am reușit să obțin valoarea în consolă, erau câteva greșeli de scriere în cod precum numele ID-ului etc., pe care nu le-am observat inițial. Oricum, situația actuală este următoarea. Când intru pe site-ul meu de pe Google, nu apare nimic în consolă. Dacă navighez pe alte pagini, indiferent de câte pagini schimb, în consolă apare google.com ca URL referrer, ceea ce e minunat! Dar, console.log este gol la prima încărcare a paginii, iar o altă problemă este că nu reușesc să completez valoarea câmpului ascuns cu JavaScript, iată codul pe care îl am: https://codeshare.io/tiirU

Domeniko Domeniko
24 mar. 2016 21:24:56

poți să-mi trimiți document.referer la prima încărcare a paginii?

Tung Du Tung Du
24 mar. 2016 21:32:41

Cred că am reușit să o fac să funcționeze, cel puțin în primele 5 teste pe paginile din cache, pare să meargă bine. Acesta este codul pe care îl am:

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 mar. 2016 22:11:43

Milioane de mulțumiri @Tung Du. Apreciez foarte mult ajutorul tău! : ))

Domeniko Domeniko
24 mar. 2016 22:12:18
Arată celelalte 1 comentarii