vendredi 11 novembre 2011

Modifier l'affichage des alert() JavaScript

Me voilà de retour après quelques mois d'absence sur mon blog.
Fidèle à mes habitudes je vais essayer de partager de nouvelles choses utiles pour tout FrontEnd Developper qui se respecte (javascript, jQuery, css, html 5, mvc, php, ...).

Trève de bavardage, passons au sujet du jour : Modifier la façon d'afficher un alert() JavaScript.

Je me suis donné comme défi de rendre l'affichage de mes alert() JavaScript plus sexy dans mes applications web.
Voici le code résultant de mes recherches et de mes tests pour remplacer automatiquement l'affichage des vieux alert() JavaScript par de jolie jQuery UI dialog.

<!DOCTYPE html>
<html>
<head>
    <!-- get jquery and jquery ui on google cdn -->
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1/jquery-ui.min.js"></script>
    <link rel="stylesheet" type="text/css" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1/themes/dot-luv/jquery-ui.css" />
  
    <!-- create script that overwrite the browser alert() -->
    <script type="text/javascript">  
        window.alert = function(native) {
            return function(message) {
                try {
                    // display the alert message with the jquery ui dialog
                    jQuery("<div>" + message + "</div>").dialog({
                        modal:true, resizable:false, draggable:false,
                        buttons: {
                            Ok: function() { $(this).dialog("close"); }
                        }
                    });
                } catch(e) {
                    // display the alert with the native browser alert
                    native(message);
                }
            }
        }(window.alert);
    </script>
</head>
<body>
    <h1>JavaScript Custom alert()</h1>
  
    <p>
        <!-- test to call the alert() function -->
        <a href="#" onclick="alert('There is my beautiful alert !');return false;">Display an alert</a>
    </p>
</body>
</html>

Testé avec IE6, IE7, IE8, IE9 x86, IE9 x64, Chrome 15, Firefox 8.

samedi 7 mai 2011

Malédiction des mises en ligne le vendredi

Tout le monde sait que je ne suis pas un fervant admirateur des mises en ligne de site Web le vendredi avant de partir en week-end ... mais bon il arrive quelques fois où nous avons pas d'autre choix.

Ce que je trouve drôle de ces mises en ligne de vendredi, c'est qu'on dirait qu'elle sont toutes victimes d'une sorte de malédiction faisant en sorte que ça ne fonctionne jamais du premier coup.

Un exemple plutôt cocasse s'est produit vendredi dernier.

Une fois le site Web en ligne, deux pages se sont mis à mal fonctionner. Le problème est plutôt difficile à décrire, la page commençait à s'afficher puis une erreur 404 remplaçait la page dans Internet Explorer 8.

Alors après un peu d'investigation nous avons été obligé de sortir l'artillerie lourde ... Fiddler2.

Fiddler2 nous a alors montrer que la page tombait en erreur 404 après une tentative pour charger un certain fichier (BorderRadius.htc). Donc une recherche dans le projet nous montre que l'appel du fichier est placé dans un fichier .css du site Web.

Mais l'erreur de beaucoup de personne, c'est que la propriété css behavior pour loader les .htc ne fonctionne pas comme les propriétés css faisant appel à des images. Le lien relatif doit être fait à partir de la page qui à appeller le fichier .css et non à partir du fichier .css.

Donc nous corrigeons le lien relatif pointant sur le fichier BorderRadius.htc et le site Web se remet à bien fonctionner.

Je finirai en disant prenez garde à la malédiction des mises en ligne de vendredi.