programmation

javascript eval global : part 2

mardi 27 février 2007

Après une première approche non sans faille de l’évaluation d’un code javascript dans un contexte global , voici la seconde version, compatible FireFox et IE et tout les navigateurs dérivés.

 

Et oui il fallait savoir que le navigateur de l’homme le plus riche du monde implémente une méthode : window.execScript inconnu des standards.

Cette méthode n’est pas compatible avec Safari. Je travaille encore dessus mais il semble que KHTML (le moteur de base de Safari et de Konqueror) soit allergique à une déclaration propre…

La méthode utilisé par les framework tel que prototype semble être celle qui donne le meilleur résultat. Il s’agit de la méthode setTimeout(code,0) seulement les variables évaluées ne sont disponibles que dans un prochain appel non inline (provoquer par un évênement ou bien un autre appel avec setTimeout).

J’ai déjà passer beaucoup de temps dessus sans succès… De plus pour tester les résultat j’utlise Swift qui implémente le même moteur que Safari (WebKit) et on ne peut pas dire que ce soit une lumière… normal c’est un safari 🙂

Il y aura donc surement une troisième partie, entièrement compatible cette fois.

mise à jour : Et la voilà, code final pour un eval javascript propre

OpenLaszlo : Flex et AJAX pour tous

mardi 20 février 2007

openlaszloJ’étais en train de me dire que je remodelerais bien mon lecteur video sans utiliser les composants Flash (FLVPlayback) et vu que depuis plusieur jour je me branche sur xml, je me suis dit pourquoi pas testé Adobe Flex (c’est moi ou ça sent mauvais tout à coup ?). Et vu que prix donne encore moins envie que le nom (qui me fait penser à daube + spontex 😀 ), je me suis dit, il y en a bien qui sorte des serveurs Flash open-source, pourquoi pas Flex open-source (déjà direct ça sonne mieux) ?

la réponse : OpenLaszlo

Il n’utilise pas toute à fait la même technologie : Flex utilise MXML, language dérivé de XML alors que OpenLaszlo utilise XML et JavaScript, le but étant le même : créer des animations flash simplement à partir d’instructions et non uniquement à l’aide d’un IDE. Cependant OpenLaszlo va plus loin, à partir de votre fichier XML (le code de votre appli) il est capable de la resortir en Flash ou bien, en DHTML !!!

Alors là je dit chapeau, la compatibilité a l’air d’être repecté au maximum, votre animation Flash ressort en HTML avec javascript. Je vous invite vivement à tester les exemples, il faut le voir pour le croire.

domxml et php5

lundi 19 février 2007

je voulais formatter des données xml à l’aide d’une feuille de style xsl lorsque je me suis aperçu que même en suivant à la lettre les exemples de php.net, la class DOMDocument me retournait une erreur :

span class="co1">// retourne l'erreur :
// domdocument() expects at least 1 parameter, 0 given

J’ai éssayé sur un serveur distant… tout marche !!!

Alors en vérité, c’est une question de version. En php4, on utilise l’extension domxml, et en php5 l’extension DOM.
Seulement domxml n’est pas compatible avec DOM. Il est donc déconseillé d’inclure l’extension domxml en php5 car les fonctions sont surchargé.

Comme mon serveur local est en php5, il fallait simplement enlever php_domxml du php.ini.

Si vous voulez transformer vos script de php4 à php5, vous pouvez toujours inclure l’extension domxml/php5 sachant que vous ne pourrez plus utiliser l’extension DOM. Cela dit, je vous conseille plutôt de passer de domxml/php4 à dom/php5.

flash, actionscript, et mon devant…

jeudi 15 février 2007

Vu que mon videoplayer devient quelque peut blindé, et vu la lenteur du au problème de parsage de chaine sérializé, la situation n’allait qu’empirer.. Donc je me suis dit, je vais éssayer de transmettre mes données en XML vu qu’un parser XML est présent dans Flash 8.

Lire la suite

filtre html en PHP

mardi 13 février 2007

cela faisait longtemps que je cherchais un bon filter de syntaxe HTML en PHP pour pouvoir enfin proposer aux posteurs d’écrire les commentaires en HTML pure.

Tout le monde jusqu’alors a dérivé cette problèmatique. Entre le BBcode, le wikitext (mainte fois reproduit), le Textile, le zcode (bbcode avec des > <) on est bien loin de la simplicité, des normes et du potentiel du language HTML. Par contre niveau sécurité, c’est sur qu’on est tranquille vu qu’on peut pas faire grand chose 🙂

Comme l’a dit Einstein :
Une personne intelligente résout un problème. Une personne sage l’évite.

Il faut croire qu’on est rentré dans l’air de l’intelligence 😀 , voici HTML Purifier

Attention, HTML purifier n’est pas un filtre batard, la syntax HTML qui ressort est valider par le W3C.
On est bien loin des anciens filtres comme PHP Input Filter (franchement limité), kses (mais où est le site officiel ?), le package PEAR HTML_Safe… etc
Ici c’est de l’or en barre, mais l’or ça pèse lourd. Je doute que les applications qui l’utiliseront filtreront les posts avant chaque affichage comme c’est le cas actuellement (punbb, IPB…).

C’est gourmand, mais efficace. Bien entendu, HTMLPurifier peut vous enlever les interactions javascript (qui pourrais provoquer des failles XSS). Tout est entièrement paramètrable, restreindre un attribut, une classe CSS, empêcher l’application d’un paramètre CSS, enlever les liens ou les images avec des URL externe, tout ce qu’on pouvait en attendre !!! Un petit plus, il parse aussi dans l’encodage que l’on veut !!! vraiment magnifique.

Le projet est tout jeune, il reste quelques améliorations à faire mais on en parle de plus en plus. Je suis encore en phase de test mais ça parait TRES prometteur et peut-être qu’enfin on pourra offrir des interfaces WYSIWYG dans les forums et les blogs 🙂

réducteur/obscurateur/encodeur de javascript

jeudi 8 février 2007

Si vous voulez mettre en ligne vos lourds et gros code javascript, la moindre des choses seraient de les réduires afin que le temps de chargement de ceux-ci soient minimum.

Je ne saurais donc trop vous conseiller cet outil en PHP : javascript-packer

A la base disponible en javascript sur le site de Dean Edwards, qui, on peut le dire est l’inspirateur du framework Prototype, cet outil a été developpé en plusieurs autre languages: .NET, python, Perl et meme en Ruby. bizarrement, aussi en WSH (une sorte de javascript en ligne de commande pour Windows)

Vous me direz il en existe surement beaucoup des outils comme ça… oui seulement il ne font pas tous le boulot très bien.
La différence réside dans la prise en compte ou non des pre-incrémentation et post-incrémentation :

span class="co1">//c = 3 + 3 = 6; a= 2 + 1 = 3; b = 3;

La pluspart des outils enlève betements les espaces, on obtient donc :

 

ici le compilateur comprendra :
span class="co1">//c = 3 + 2 = 6; a= 2; b = 3 + 1 = 4;

ce qui fait une certaine différence…

De plus il vous offre la possibilité de compresser votre code si vous avez vraiment quelque chose de gros à éxécuter.

L’auteur travaille actuellement sur une version d’obsucuration des variables non-globale ce qui permettrais de réduire encore plus la taille.

Update : j’ai créé le mien 😉 jsxs

input file et javascript

lundi 5 février 2007

Voulant développer un file uploader simple et compatible, je me suis penché sur les spécifications du input type file et de ses différences suivant les navigateurs.

On remarque tout d’habord qu’aucun d’eux ne respecte le W3C et sur plusieur point :

  • Ce dernier dit que l’on peut prédéfinir le fichier à uploadé en attribuant un chemin dans la propriété « value ». Ni Opera, ni FireFox, ni meme IE ne le fait. Cela est compréhensible, c’est une question de sécurité.
  • En ce qui concerne FireFox et Opera, la méthode click() d’un input file n’a aucun éffet… vous ne pourrez donc pas lancez la fenetre de selection de fichier à l’aide d’un lien simple. Il faut impérativement que l’utilisateur click sur le bouton « Parcourir… » du input file pour pouvoir selectionner un fichier. Ce qui limite énormément les possibilités !!! D’autant plus que cela ne me semble pas justifié : il faudrait une sacré chance pour que l’utilisateur click par le plus grand des hazard inintentionnellement sur un fichier puis sur « ouvrir » (qui aura pour éffet de selectionner le fichier dans le input file). A noté que Internet Explorer accepte et éxécute cette fonction correctement.
  • Et pour Internet Explorer maintenant, la méthode cloneNode() ne copie pas réellement l’élément input et sont contenu car il vide l’attribut « value » de celui-ci si il existe. Exemple :
    span class="st0">'value:'//affiche 'value:' + le chemin de votre fichier
    'new value:'//affiche 'new value:' uniquement car newfile.value == ''
    }

    la encore, je trouve ça totalement injustifié ! A noté qu’Opera et FireFox copie correctement le noeud avec la valeur.

Du coup, aucune méthode correcte, simple et portable sans iframe visible ne permet d’uploader des fichiers parce que personne n’arrive encore à s’entendre sur une spécification globale. Si vous utilisez GMail, vous pourrez remarquer que celui-ci a une méthode différente en fonction des navigateurs pour l’upload de pièce jointe sans ce servir d’iframes visibles. Il faut dire qu’avec les recommandations du W3C la dessus, on pourrait pépom votre disque dur tout simplement. Donc c’est simple, ici tout le monde a fait et fait encore de la ……

J’ai dernièrement recensé les principal méthodes permettant de faire un input file en javascript / AJAX ici.

prototype JS v1.5

mercredi 31 janvier 2007

La nouvelle version du framework javascript prototype a été lancé il y a une dixaine de jours à peu près en meme temps que leur nouveau site : prototypejs.org

J’était partie mécontent de cette nouvelle version, car, pour commencer, lorsque j’ai remplacer l’ancienne par celle ci dans mes scripts existants, beaucoup de fonctionnalité ne marchaient plus… Ils semblent qu’ils aient implémenté beaucoup de nouvelles fonctions puissantes mais qui diffères légèrement des fonctions originales.

Lire la suite

secure remote password protocol (SRP)

SRP est un protocole en fin de developpement distribué par Stanford permettant une méthode d’authentification login/password sécurisée sans utiliser le système RSA de clef public et leurs certificats.

Je ne vous parle pas de la sécurité des mots de passes betement hashés avant les transmissions

Lire la suite

form addEventListener submit

mardi 30 janvier 2007

J’ai capté pourquoi les retours d’EventListeners dans les addEventListener associés à l’action submit sur un form ne marchent pas.

un petit bout de code pour l’exemple :

span class="st0">'submit'

Cela n’annulera pas l’action sur lorsque l’ont click sur un boutton submit dans le formulaire.
La raison est simple, il peut y avoir plusieurs EventListeners associé au meme éléments et à la meme action, il serait donc dure de savoir quel valeur de retour le moteur va prendre en compte si il y en a plusieur.

Pour cette raison, le code retournant la valeur de retour définissant si le formulaire doit etre envoyé ou non doit etre placé dans la propriété onsubmit de l’élément :

 

Maintenant, le formulaire est désactivé et ne s’éxécutera uniquement si l’on fait apel à la méthode :

 

à noté que cela est aussi valable pour les action click des liens, la méthode addEventListener ne marchera pas, il faut utiliser :