Eléphant du PHP |
71 Messages
04 févr. 2007, 02:25
Certes... C'était plus pour le principe...
Je ne me sers pas de Prototype, en effet, parce qu'avoir une page inaccessible d'entrée de jeu ne m'enchante guère... Les connexions à faible débit sont toujours nombreuses et la page que tu me montres pèse 144ko à elle seule alors que ça ne nécessite que 10-15ko maxi. Ces utilisateurs se retrouvent alors avec des temps de chargement énormes pour avoir un petit effet sur un conteneur.
peu de gens sont familiarisé avec ce framework
Il y a surtout peu de gens qui savent s'en servir à bon escient... 2-3% tout au plus...
La plupart des personnes s'en servent pour les effets visuels alors que si on prend le temps de refaire uniquement ceux dont on a réellement besoin, on peut diminuer le volume de script par 10 et on n'a plus aucun conflit.
Les conflits dûs à Prototype sont nombreux, et pour cause, l'auteur a une la bonne idée de redéfinir Object... sympa pour les autres...
Il aurait mieux fait de corriger les nombreux avertissements de son code, je trouve...
Bref, je suis un anti-Prototype, tu l'auras compris...
Si vraiment, je dois avoir recours à une bibliothèque, je n'en connais qu'une qui vaut le coup à l'heure actuelle : jQuery
Pour ce qui est du code que je t'ai proposé tout à l'heure, je l'aurais fait comme suit afin de protéger au mieux mon code et en vue d'annihiler le risque d'interactions qui pourrait en découler.
Code : Tout sélectionner
(function() {
// window.onload solution by Dean Edwards/Matthias Miller/John Resig
if(document.addEventListener)
document.addEventListener("DOMContentLoaded", fnInit, false);
/*@cc_on @*/
/*@if (@_win32)
document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>");
var script = document.getElementById("__ie_onload");
script.onreadystatechange = function()
{
if(this.readyState == "complete")
fnInit();
};
/*@end @*/
if (/WebKit/i.test(navigator.userAgent))
{
var _timer = setInterval(function()
{
if(/loaded|complete/.test(document.readyState))
fnInit();
}, 10);
}
window.onload = fnInit;
//end
function fnConnect(oElem, sEvType, fn, bCapture)
{
return oElem.addEventListener ?
oElem.addEventListener(sEvType, fn, bCapture):
oElem.attachEvent ?
oElem.attachEvent('on' + sEvType, fn):
false;
}
function fnCancelClick(e)
{
if(e && e.stopPropagation && e.preventDefault)
{
e.stopPropagation();
e.preventDefault();
}
else if(window.event)
{
window.event.cancelBubble = true;
window.event.returnValue = false;
}
return false;
}
function fnInit()
{
if(arguments.callee.done)
return;
arguments.callee.done = true;
if(_timer)
clearInterval(_timer);
if(!document.getElementsByTagName)
return;
var oA = document.getElementsByTagName('a')[0];
fnConnect(oA, 'click', fnGetEvent, false);
};
function fnGetEvent(e)
{
alert(e.type);
fnCancelClick(e);
}
})();