Alla fine credo di aver scoperto il problema.
Tutti i clienti sui quali bugsnag ha rilevato il syntaxerror (in varie
forme e sia da Chrome che da Firefox che da Safari) erano connessi da
IP di VODAFONE.
Dopo varie ricerche ho scoperto che Vodafone utilizza un transparent
proxy per comprimere immagini, minimizzare css e javascript e altre
operazioni di questo tipo.
In un mio javascript (aggregato e minimizzato) era presente una
sequenza di questo tipo:
--
var a = function() { .... }
!function() { ... }||...
----
Il transparent proxy di vodafone toglieva l'invio tra queste due righe
rendendo la sintassi errata:
---
var a = function() { .... }!function() { ... }||...
---
E' bastato inserire un ";" ESPLICITO in fondo alla prima definizione e
la modifica applicata dal proxy di vodafone non rompe più la sintassi.
A meno che a voi non venga in mente qualche altra conclusione io l'ho
classificato come un bug del minimizzatore usato dal transparent proxy
di Vodafone che da quello che ho capito si può risolvere in vari modi:
1) usare sempre ; espliciti perchè qualcuno potrebbe toglierti degli
"a capo" che sono necessari per far funzionare i ";" impliciti
2) mettere "Cache-Control: no-transform" nelle risposte del server
(non testato, ma leggendo in giro sembrava essere una soluzione per
evitare che Vodafone e altri transparent proxy facciano danni)
3) muovere tutto in https così che i transparent proxy non ci mettano
lo zampino.
Vorrei chiudere sottolineando come una caratteristica di un linguaggio
(punti e virgola facoltativi in molte situazioni) abbia contribuito a
creare questo bug in quanto gli sviluppatori del proxy di vodafone
avrebbero più difficilmente commesso questo errore se la sintassi di
javascript fosse stata più rigida: in javascript il ";" può essere
omesso solo se dopo c'è un invio o una graffa chiusa e probabilmente
gli sviluppatori vodafone (o quelli del software che loro usano) non
conoscevano la regolina quando hanno deciso che quell'invio poteva
essere tolto, oppure l'hanno mal interpretata.
PS: in realtà il codice che viene alterato da Vodafone ce l'avevamo
anche nella vecchia versione di VOXmail ma usavamo un aggregatore js
leggermente diverso che nell'aggregare i file metteva ";" all'inizio e
"\n" in fondo a ciascun file mentre il nuovo aggregatore mette solo i
"\n" e quindi si creava quella sequenza che sintatticamente è valida
ma che evidentemente il filtro Vodafone rompe (anche per questo motivo
identificare il problema è stato molto più difficoltoso).
E quindi adesso dovremo tutti aggiungere web testing dei nostri
servizi web connettendoci dalle varie reti dei vari operatori? La
nuova frontiera del testing?
Stefano