Home Funzionalità Come funziona Prezzi Integrazioni FAQ Contatti English (EN) Français (FR) Español (ES) Nederlands (NL) Deutsch (DE)
← Torna alle integrazioni Integrazioni · HTML semplice

Nessun backend? Nessun problema.

Tutto, sia l’embed sia il tracciamento delle campagne, funziona lato client in JavaScript, perché non c’è un server che elabori la chiave aziendale o i parametri di tracciamento.

// 01

Tracciamento su tutto il sito + funzione di recupero

Aggiungilo nel <head> oppure subito prima di </body> di ogni pagina del sito:

<script>
(function(){
  var KEYS = ['gclid','gbraid','wbraid','utm_source','utm_medium','utm_campaign','utm_term','utm_content','fbclid'];

  // Stores a cookie if this page has any of them in the URL
  KEYS.forEach(function(k){
    var m = new RegExp('[?&]'+k+'=([^&#]*)').exec(window.location.href);
    if(m){
      document.cookie = 'fb_' + k + '=' + m[1] + ';max-age=7776000;path=/;SameSite=Lax';
    }
  });

  // Used by the embeds below to retrieve it
  window.fbGetTrackingParams = function(){
    var qs = '';
    KEYS.forEach(function(k){
      var m = new RegExp('[?&]'+k+'=([^&#]*)').exec(window.location.href);
      var val = m ? m[1] : null;
      if(!val){
        var match = document.cookie.match(new RegExp('(^| )fb_' + k + '=([^;]+)'));
        if(match) val = match[2];
      }
      if(val) qs += '&' + k + '=' + val;
    });
    return qs;
  };
})();
</script>
// 02

Fai ridimensionare l’iframe in automatico

Un iframe non cresce da solo quando cresce il suo contenuto: se non glielo indichi, il modulo viene tagliato non appena il contenuto si espande (per esempio aprendo il pannello Options). Entrambi gli embed qui sotto lo prevedono già, ma lo schema è sempre fatto degli stessi tre elementi, in quest’ordine:

  1. Lo script di ridimensionamento — prima dell’iframe
  2. L’iframe vero e proprio, con un id fisso
  3. Un piccolo script che attiva il ridimensionamento — dopo l’iframe, riferito allo stesso id

Usa la copia dello script ospitata da FareBookings

app.farebookings.com/iframe-resizer/iframeResizer.min.js — non una CDN di terze parti. Ad blocker, firewall aziendali e plugin di ottimizzazione a volte bloccano le CDN esterne, ma non il dominio su cui vive già il widget.

// 03

Widget compatto

<div id="fb-widget-container"></div>
<script src="https://app.farebookings.com/iframe-resizer/iframeResizer.min.js"></script>

<script>
(function(){
  var container = document.getElementById('fb-widget-container');
  var params = 'k=YOUR_COMPANY_KEY&lng=gb';
  var tracking = window.fbGetTrackingParams ? window.fbGetTrackingParams() : '';

  var iframe = document.createElement('iframe');
  iframe.id = 'fb-booking-widget';
  iframe.src = 'https://app.farebookings.com/booking-widget.php?' + params + tracking;
  iframe.width = '100%';
  iframe.height = '640';
  iframe.frameBorder = '0';
  iframe.scrolling = 'no';
  iframe.style.border = 'none';
  container.appendChild(iframe);

  if (window.iFrameResize) {
    iFrameResize({checkOrigin: false, heightCalculationMethod: 'lowestElement'}, '#fb-booking-widget');
  }
})();
</script>
// 04

Modulo di prenotazione completo

La correzione più importante di questa pagina

Se un widget compatto in un’altra parte del sito (la home page, per esempio) viene inviato e porta il visitatore su questa pagina, tutto ciò che ha già inserito — partenza, destinazione, data, passeggeri ed eventuali gclid/utm_* — arriva nell’URL di questa pagina. Se questa pagina non lo legge e non lo inoltra all’iframe, va tutto perso e il modulo si carica vuoto. Questo vale solo quando il widget manda i visitatori a una pagina del tuo sito con il modulo incorporato: se invece il widget rimanda direttamente a app.farebookings.com, costruisce da solo quell’URL e non serve nulla di tutto questo.

La soluzione: leggi la query string di questa pagina con window.location.search e inoltrala per intero all’iframe:

<div id="fb-form-container"></div>
<script src="https://app.farebookings.com/iframe-resizer/iframeResizer.min.js"></script>

<script>
(function(){
  var container = document.getElementById('fb-form-container');
  var baseParams = 'k=YOUR_COMPANY_KEY&d=pp&lng=gb';

  // Forward EVERYTHING this page's own URL was given — this is what
  // carries the widget's data through when it redirects here.
  var ownParams = window.location.search.replace(/^\?/, '');
  var finalParams = baseParams + (ownParams ? '&' + ownParams : '');

  var iframe = document.createElement('iframe');
  iframe.id = 'fb-booking-form';
  iframe.src = 'https://app.farebookings.com/step1sslv3.php?' + finalParams;
  iframe.width = '100%';
  iframe.style.border = 'none';
  iframe.style.minHeight = '1400px';
  iframe.scrolling = 'no';
  container.appendChild(iframe);

  if (window.iFrameResize) {
    iFrameResize({checkOrigin: false, heightCalculationMethod: 'lowestElement'}, '#fb-booking-form');
  }
})();
</script>

Sostituisci YOUR_COMPANY_KEY con la chiave reale che trovi nella scheda Frontend del tuo pannello, in entrambi gli snippet qui sopra. Inoltrando window.location.search per intero porti già con te tutto ciò che il widget ha inviato, compresi gclid/utm_*, quindi su questa pagina non serve usare di nuovo fbGetTrackingParams().

// Opzioni comuni
Modalità scuraAggiungi &dark=1 a params.
Pannello Options apertoAggiungi &opts_open=1 a params.
LinguaSostituisci lng=gb con lng=es, lng=fr, ecc.
Barra orizzontaleAggiungi &layout=inline a params per il widget (non per il modulo completo). Richiede circa 1000px di larghezza e sotto i 900px si dispone da solo in colonna, senza markup separato per il mobile. Con questo layout imposta iframe.height a '200' invece di '640', altrimenti resta un vuoto visibile sotto la barra nei primi istanti prima che iframeResizer la misuri.
// Verifica del funzionamento

Verifica che il tracciamento funzioni

  1. Apri una qualsiasi pagina con ?gclid=test123 alla fine dell’URL.
  2. Apri la console del browser (F12) → digita document.cookie.
  3. Dovresti trovare fb_gclid=test123.
  4. Passa a un’altra pagina (senza il parametro) e controlla che il cookie sia ancora presente prima di arrivare al widget o al modulo.

Usi un’altra piattaforma?

Esistono guide dedicate a WordPress e ai siti in PHP puro.