De ma courte expérience des plugins de SPIP, c’est le seul qui fait ça, et qui du coup provoque une erreur dans mes pages, où j’utilise un #FILTRE en fin de traitement pour, assez simplement, transformer <script href>
en <script async href>
.
Et là, comme c’est balancé en affichage_final, je ne peux donc pas le modifier. Et donc je suis obligé de me plier à la méthode intégrée à SPIP 3.1, avec _JS_ASYNC_LOAD, qui transforme profondément la façon d’appeler le Javascript avec insertion de code façon usine à gaz.
Je veux bien que ça marche, mais m’embête tout de même beaucoup de voir ajouté à mes pages un code que je ne contrôle pas du tout, qui est rigoureusement incompréhensible, et qui ressemble à ceci :
var jQl={q:[],dq:[],gs:[],ready:function(a){"function"==typeof a&&jQl.q.push(a);return jQl},getScript:function(a,c){jQl.gs.push([a,c])},unq:function(){for(var a=0;a<jQl.q.length;a++)jQl.q[a]();jQl.q=[]},ungs:function(){for(var a=0;a<jQl.gs.length;a++)jQuery.getScript(jQl.gs[a][0],jQl.gs[a][1]);jQl.gs=[]},bId:null,boot:function(a){"undefined"==typeof window.jQuery.fn?jQl.bId||(jQl.bId=setInterval(function(){jQl.boot(a)},25)):(jQl.bId&&clearInterval(jQl.bId),jQl.bId=0,jQl.unqjQdep(),jQl.ungs(),jQuery(jQl.unq()), "function"==typeof a&&a())},booted:function(){return 0===jQl.bId},loadjQ:function(a,c){setTimeout(function(){var b=document.createElement("script");b.src=a;document.getElementsByTagName("head")[0].appendChild(b)},1);jQl.boot(c)},loadjQdep:function(a){jQl.loadxhr(a,jQl.qdep)},qdep:function(a){a&&("undefined"!==typeof window.jQuery.fn&&!jQl.dq.length?jQl.rs(a):jQl.dq.push(a))},unqjQdep:function(){if("undefined"==typeof window.jQuery.fn)setTimeout(jQl.unqjQdep,50);else{for(var a=0;a<jQl.dq.length;a++)jQl.rs(jQl.dq[a]); jQl.dq=[]}},rs:function(a){var c=document.createElement("script");document.getElementsByTagName("head")[0].appendChild(c);c.text=a},loadxhr:function(a,c){var b;b=jQl.getxo();b.onreadystatechange=function(){4!=b.readyState||200!=b.status||c(b.responseText,a)};try{b.open("GET",a,!0),b.send("")}catch(d){}},getxo:function(){var a=!1;try{a=new XMLHttpRequest}catch(c){for(var b=["MSXML2.XMLHTTP.5.0","MSXML2.XMLHTTP.4.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"],d=0;d<b.length;++d){try{a= new ActiveXObject(b[d])}catch(e){continue}break}}finally{return a}}};if("undefined"==typeof window.jQuery){var $=jQl.ready,jQuery=$;$.getScript=jQl.getScript};
Une grosse grosse partie de mon temps de travail est consacré à chercher pourquoi tel script ne fonctionne pas selon mes besoins, et assez souvent pourquoi tel script a cessé de fonctionner alors qu’avant il fonctionnait. Des bouts de code pareil, avant même de charger quelque script que ce soit (dont, pour une large part, je serais l’auteur), c’est pas du tout rassurant. :-)
(Et en plus, c’est typiquement une façon d’appeler les scripts qui fait que je ne peux plus aspirer simplement un site avec mon wget
usuel.)
Je pense que, tout en profitant des avantages de ce script, on devrait s’astreindre à coder nos plugins pour que leur Javascript fonctionne déjà avec la méthode usuelle désormais conseillée, c’est-à-dire le simple appel <script href async>
.