URL di riferimento con jQuery o Javascript - Problema di Cache e URL Referrer

24 mar 2016, 18:48:11
Visualizzazioni: 23.6K
Voti: 0

Spero che qualcuno possa aiutarmi : )

Quello che sto cercando di fare è ottenere l'URL referrer della prima visita e inviarlo al form. Utilizziamo il plugin Contact Form 7, quindi ho creato un campo input nascosto, acquisisco l'URL referrer e assegno quel valore al campo nascosto.

Tutto funzionava bene, finché non ho abilitato il caching.

Questa è la funzione che uso (nel caso in cui qualcuno ne abbia bisogno)

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

Dove "referer-page" è il nome e l'ID del campo nascosto nel form di Contact Form 7.

Una volta abilitato il cache, ho dovuto pensare a una soluzione Javascript o jQuery per impostare il cookie.

Ho aggiunto il jQuery Cookie Plugin (https://github.com/carhartl/jquery-cookie) e poi ho provato diverse varianti del codice sottostante per creare un cookie e impostarne il valore.

Il mio obiettivo è: quando un visitatore arriva per la prima volta, impostare il valore del cookie all'URL referrer, ma poi mantenere il valore, per esempio se il visitatore arriva al sito da google.com e poi naviga tra le pagine del sito, quando compila il form, il valore nel campo nascosto dovrebbe essere ancora l'URL di Google con i suoi parametri.

Questo è il codice JS che ho attualmente nel footer.php del tema.

jQuery(document).ready(function($){  // INIZIO JQUERY PERSONALIZZATO NO CONFLICT
    // $.cookie('mysite_referrer', document.referrer);
    // var initreferrer = document.referrer;
    // $.cookie('mysite_referrer', initreferrer);
    //console.log('current cookie ref:'+$.cookie('external_referrer_cookie'));
    //console.log('testing');
    $.cookie('external_referrer_cookie');
    if ($.cookie('external_referrer_cookie') == 'undefined' ) { 
        // console.log('setting cookie for'+ document.referrer); 
        $.cookie('external_referrer_cookie', document.referrer);
        $('.wpcf7-text.referer-page').val($.cookie('wsg_external_referrer_cookie'));
        console.log('current cookie ref:'+$.cookie('wsg_external_referrer_cookie'));
    }
    // $('#referer-page').val($.cookie('external_referrer_cookie'));
    console.log('current cookie out of function ref:'+$.cookie('external_referrer_cookie'));

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

    function checkCookie() {
        if (document.cookie.length > 0 && document.cookie.indexOf(cookieName + '=') != -1) {
                // non fare nulla, cookie già inviato
        } else {
                // gestisci l'animazione jQuery

                // imposta il cookie per mostrare che l'utente ha già visitato
                document.cookie = cookieName + "=1";
        }
    }
    */

}); // FINE JQUERY PERSONALIZZATO NO CONFLICT

Come puoi vedere nelle righe commentate, ho provato molti approcci che ho trovato in diversi tutorial online. Sto lottando con questo problema da un paio di giorni, per favore aiutatemi : ))

Grazie

1
Commenti

Sembra che tu stia utilizzando una versione più vecchia del plugin jQuery Cookie, come indicato nella pagina Questo progetto è stato spostato su https://github.com/js-cookie/js-cookie quindi forse dovresti aggiornare nuovamente il tuo codice.

Jevuska Jevuska
24 mar 2016 21:55:51
Tutte le risposte alla domanda 1
6

Non ho la risposta basata sui cookie, ma penso che questi non siano dati sensibili, puoi provare con localStorage.

jQuery(document).ready(function($){
    var initreferrer = document.referrer;
    if(initreferrer.indexOf('yourdomain.com') === -1 ) { // Controlla se il referer è il tuo sito o meno. Se non lo è (ritorna -1) imposta il localStorage.
        localStorage.setItem("mysite_referrer", initreferrer);
    }
});

Poi puoi usare una funzione javascript (invece di un filtro come hai fatto) per riempire il tuo campo nascosto con il referer salvato nel localStorage del browser. Possiamo ottenerlo con localStorage.getItem("mystite_referer").

24 mar 2016 20:42:53
Commenti

Ciao @Tung Du, grazie per la risposta. Puoi dirmi come potrei riempire il valore del campo nascosto con JavaScript? Ho provato $('.referrer-page').val(localStorage.getItem("mystite_referer")); ma non ha funzionato. Inoltre, console.log(localStorage.getItem("mystite_referer")); << restituisce il valore NULL nella console.

Domeniko Domeniko
24 mar 2016 21:06:39

NULL significa che il localStorage non è ancora stato impostato. Quindi non puoi riempire il campo nascosto. Devi modificare il tuo dominio nella condizione per proteggere il primo referer. Qui ho saltato il referer dal tuo sito web. Solo al di fuori del tuo sito web. Puoi prima commentare la condizione if per assicurarti che tutto funzioni. Puoi anche fare console.log(initreferrer) per controllare il document.referer per un debug più semplice.

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

Sono riuscito a ottenere il valore nella console log, c'erano alcuni errori di battitura nel codice come il nome dell'ID ecc., che inizialmente non avevo notato. Comunque, la situazione che ho ora è la seguente. Quando vado al mio sito web da Google, non c'è nulla nella console, se navigo verso altre pagine, non importa quante pagine cambio, nella console mostra google.com come URL referrer, quindi è ottimo! Ma, console.log è vuoto al primo caricamento della pagina, e un altro problema è che non riesco a riempire il valore del campo nascosto con JS, questo è il codice che ho: https://codeshare.io/tiirU

Domeniko Domeniko
24 mar 2016 21:24:56

potresti inviarmi il document.referer al primo caricamento della pagina?

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

Penso di averlo fatto funzionare, almeno nei primi 5 test su pagine in cache, sembra funzionare bene. Questo è il codice che ho:

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

Grazie mille @Tung Du. Apprezzo molto il tuo aiuto! : ))

Domeniko Domeniko
24 mar 2016 22:12:18
Mostra i restanti 1 commenti