Pubblicato il 26/08/15e aggiornato il

Come risolvere quando il modello di Blogger non salva un codice javascript.

Quattro metodi per salvare i codici javascript nel modello di Blogger quando viene rilevato un errore di Analisi in una determinata riga del template.
Se siete utenti di Blogger vi sarà certamente capitato di incollare un codice nel vostro modello che apparentemente sembra perfetto, visto che lo avete scaricato per esempio dalla pagina dei Social Plugin di Facebook, che però il template di Blogger si rifiuta di salvare.

L'avviso di errore che visualizza l'amministratore del blog ha in genere questa forma:

Errore di analisi nella riga … Il riferimento alla entità … deve terminare con …. 

La ragione di questa difficoltà risiede nella tipologia dello stresso modello di Blogger. I blog di Blogger sono codificati con il linguaggio XHTML e XML. Una pagina scritta in XHTML non è altro che una pagina HTML scritta in conformità con lo standard XML. Il template di Blogger è in XML e interpreta come errati i simboli che in tale linguaggio non sono consentiti all'interno di un javascript come <, >, ", ', e &.

Queste difficoltà si  superano in quattro modi diversi di cui però solo gli ultimi due sono consigliabili.

1) SOSTITUIRE MANUALMENTE I CARATTERI CON QUELLI CORRISPONDENTI


Questo è il procedimento più lungo e anche più difficoltoso. Ciascun simbolo di quelli elencati può essere sostituito nel codice con la sua entità corrispondente secondo questa regola.
  1. < si sostituisce con  &lt;
  2. > si sostituisce con   &gt;
  3. " si sostituisce con  &quot;
  4. ' si sostituisce con &apos;
  5. & si sostituisce con  &amp;
È evidente che questa sostituzione carattere per carattere può essere molto antipatica. C'è da dire però che il modello di Blogger spesso accetta anche questi caratteri nel javascript e li modifica con quelli delle entità. Vi sarete certamente accorti come le virgolette " vengano spesso modificate in &quot;

2) CREARE UN FILE JAVASCRIPT

Un altro sistema per salvare un javascript che non viene accettato è quello di caricarlo come file. Prendiamo per esempio il javascript per anonimizzare gli ID di Google Analytics

<script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
  ga('create', 'UA-XXXXXXX-YY', 'auto');
  ga('set', 'anonymizeIp', true);
  ga('send', 'pageview');

</script>

Possiamo eliminare la prima e l'ultima riga e salvare tutto il resto evidenziato di giallo con Notepad++ in un file in formato .js che possiamo denominare per esempio google-analytics.js. Tale file possiamo caricarlo su Google Sites o meglio ancora su Google Drive. Nel modello di Blogger allora andrebbe incollato un codice come questo

<script src='URL_DIRETTO_FILE_JS' type='text/javascript'/>

o come quest'altro

<script src='URL_DIRETTO_FILE_JS' type='text/javascript'></script>

con la chiusura esplicita del tag <script>

3) PARSARE IL CODICE DEL JAVASCRIPT CONVERTENDOLO IN ENTITÀ


Quando si inserisce un banner pubblicitario nel nostro sito su Blogger risolviamo il problema dei javascript in modo radicale convertendo tutto il codice javascript con uno strumento apposito che poi non fa altro che operare le sostituzioni che abbiamo visto in precedenza in modo automatico. Si può utilizzare uno dei tool della estensione Fast String oppure un convertitore online come XML Escape. Prendendo come esempio lo stesso codice si incolla nel campo e si clicca su Escape 

conversione-codice

Nella fattispecie il codice di esempio diventa

&lt;script&gt;
  (function(i,s,o,g,r,a,m){i[&apos;GoogleAnalyticsObject&apos;]=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,&apos;script&apos;,&apos;//www.google-analytics.com/analytics.js&apos;,&apos;ga&apos;);
  ga(&apos;create&apos;, &apos;UA-XXXXXXX-YY&apos;, &apos;auto&apos;);
  ga(&apos;set&apos;, &apos;anonymizeIp&apos;, true);
  ga(&apos;send&apos;, &apos;pageview&apos;);
&lt;/script&gt;

Il codice convertito potrà essere selezionato, copiato e incollato nel modello di Blogger che stavolta lo accetterà. Il fatto che vengono convertiti i tag < e > implica che il codice prenda un aspetto esteticamente non bello con la difficoltà per apportare ulteriori modifiche. Questo sistema è da preferire per i codici Adsense che comunque non possiamo modificare per regolamento.

4) UTILIZZARE LE SEZIONI CDATA


In un documento XML una sezione CDATA viene trattata come semplice testo nel senso che il codice non viene interpretato come linguaggio di markup. Non esiste una differenza semantica tra il testo racchiuso in una sezione CDATA e quello convertito in Entità quindi questo sistema è esattamente equivalente a quello appena visto.

Le sezioni CDATA sono già state utilizzate per caricare i javascript direttamente nel modello di Blogger.  In pratica prendendo come esempio lo stesso codice di prima operiamo questa modifica

<script>
//<![CDATA[
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
  ga('create', 'UA-XXXXXXX-YY', 'auto');
  ga('set', 'anonymizeIp', true);
  ga('send', 'pageview');
//]]>
</script>

in cui sono state aggiunte due righe evidenziate di verde. La prima //<![CDATA[ si incolla subito dopo a <script> mentre la seconda //]]> si incolla subito prima di </script>.  In questo modo il modello di Blogger salverà il javascript non interpretando i caratteri all'interno della sezione CDATA come linguaggio di marcatura. Nella pratica tra i quattro sistemi proposti solo gli ultimi due sono consigliabili. Quest'ultimo ha la particolarità di mantenere immutato il codice iniziale ed è meglio usarlo nei javascript in cui ci sia anche la sola possibilità di eventuali modifiche.




Nessun commento :

Posta un commento

Non inserire link cliccabili altrimenti il commento verrà eliminato. Metti la spunta a Inviami notifiche per essere avvertito via email di nuovi commenti. Se ti ho aiutato con il post o con le risposte ai commenti condividi su Facebook o su Twitter. Grazie.