<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Kodono &#187; Programmation</title>
	<atom:link href="http://blog.kodono.info/wordpress/tag/programmation/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.kodono.info/wordpress</link>
	<description>Pour tous les technophiles</description>
	<lastBuildDate>Fri, 03 Feb 2012 08:15:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Trouver les paramètres dans l&#8217;url [Javascript]</title>
		<link>http://blog.kodono.info/wordpress/2012/02/02/trouver-les-parametres-dans-lurl-javascript/</link>
		<comments>http://blog.kodono.info/wordpress/2012/02/02/trouver-les-parametres-dans-lurl-javascript/#comments</comments>
		<pubDate>Thu, 02 Feb 2012 14:53:27 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau débutant]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=926</guid>
		<description><![CDATA[[niveau débutant] Voici une fonction courte pour récupérer l&#8217;ensemble des paramètres passés dans l&#8217;URL : function getUrlVars(a,b,c,d){b=[];if(a=location.search.split('#')[0].match(/\?(.*)(#.*)?/)){d=a[1].split('&#038;');for(i=d.length;i--;){c=d[i].split('=');b[i]=c[0];b[c[0]]=c[1]}}return b} var params=getUrlVars(); // si on a http://blog.kodono.info/?foo=bar&#038;gniii=ok#something alors : params[0]; // -> 'foo' params[1]; // -> 'gniii' params["foo"]; // -> 'bar' params["gniii"]; // -> 'ok']]></description>
			<content:encoded><![CDATA[<p>[niveau débutant]</p>
<p>Voici une fonction courte pour récupérer l&#8217;ensemble des paramètres passés dans l&#8217;URL :</p>
<pre class="brush:javascript">function getUrlVars(a,b,c,d){b=[];if(a=location.search.split('#')[0].match(/\?(.*)(#.*)?/)){d=a[1].split('&#038;');for(i=d.length;i--;){c=d[i].split('=');b[i]=c[0];b[c[0]]=c[1]}}return b}

var params=getUrlVars();
// si on a http://blog.kodono.info/?foo=bar&#038;gniii=ok#something alors :
params[0]; // -> 'foo'
params[1]; // -> 'gniii'
params["foo"]; // -> 'bar'
params["gniii"]; // -> 'ok'
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2012/02/02/trouver-les-parametres-dans-lurl-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Un algorithme court et rapide pour Array.unique() [Javascript]</title>
		<link>http://blog.kodono.info/wordpress/2012/01/26/un-algorithme-court-et-rapide-pour-array-unique-javascript/</link>
		<comments>http://blog.kodono.info/wordpress/2012/01/26/un-algorithme-court-et-rapide-pour-array-unique-javascript/#comments</comments>
		<pubDate>Thu, 26 Jan 2012 15:03:09 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau débutant]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=908</guid>
		<description><![CDATA[Voici un simple algorithme, et apparemment rapide, trouvé sur http://www.shamasis.net/2009/09/fast-algorithm-to-find-unique-items-in-javascript-array/ et que j&#8217;ai raccourci légèrement : Array.prototype.unique=[].unique&#124;&#124;function(){var o={},i,l=this.length,r=[];for(i=0;i&#60;l;i++)o[this[i]]=this[i];for(i in o)r.push(o[i]);return r} // exemple var tab=[1, 5, 2, 4, 1, 5, 4, 1, 5, 6, 8 ]; tab.unique(); // [1, 5, 2, 4, 6, 8]]]></description>
			<content:encoded><![CDATA[<p>Voici un simple algorithme, et apparemment rapide, trouvé sur <a href="http://www.shamasis.net/2009/09/fast-algorithm-to-find-unique-items-in-javascript-array/" title="http://www.shamasis.net/2009/09/fast-algorithm-to-find-unique-items-in-javascript-array/">http://www.shamasis.net/2009/09/fast-algorithm-to-find-unique-items-in-javascript-array/</a> et que j&#8217;ai raccourci légèrement :</p>
<pre class="brush: javascript">Array.prototype.unique=[].unique||function(){var o={},i,l=this.length,r=[];for(i=0;i&lt;l;i++)o[this[i]]=this[i];for(i in o)r.push(o[i]);return r}

// exemple
var tab=[1, 5, 2, 4, 1, 5, 4, 1, 5, 6, 8 ];
tab.unique(); // [1, 5, 2, 4, 6, 8]
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2012/01/26/un-algorithme-court-et-rapide-pour-array-unique-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Alternatives à IMNRC() et ProcessImn() pour déterminer la présence d&#8217;une personne [Sharepoint]</title>
		<link>http://blog.kodono.info/wordpress/2012/01/23/alternatives-a-imnrc-et-processimn-pour-determiner-la-presence-dune-personne-sharepoint/</link>
		<comments>http://blog.kodono.info/wordpress/2012/01/23/alternatives-a-imnrc-et-processimn-pour-determiner-la-presence-dune-personne-sharepoint/#comments</comments>
		<pubDate>Mon, 23 Jan 2012 15:59:23 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau expert]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[sharepoint]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=904</guid>
		<description><![CDATA[Avec Sharepoint (2003 &#038; 2007) on peut voir la présence (sur IM/MSN/Microsoft Messenger/Office Messenger/Microsoft Lynk) des utilisateurs directement dans une page Web grâce à des petites bulles de couleur. Quand on place le curseur au-dessus on aperçoit un popup avec diverses informations et possibilités. Cela n&#8217;est disponible que pour Internet Explorer puisqu&#8217;on utilise ici de [...]]]></description>
			<content:encoded><![CDATA[<p>Avec Sharepoint (2003 &#038; 2007) on peut voir la présence (sur IM/MSN/Microsoft Messenger/Office Messenger/Microsoft Lynk) des utilisateurs directement dans une page Web grâce à des petites bulles de couleur. Quand on place le curseur au-dessus on aperçoit un popup avec diverses informations et possibilités. Cela n&#8217;est disponible que pour Internet Explorer puisqu&#8217;on utilise ici de l&#8217;ActiveX (et en particulier <a href="http://msdn.microsoft.com/en-us/library/ms455335.aspx" title="Lien vers la documentation Microsoft pour NameCtrl">NameCtrl</a>).</p>
<p>Je force le mode standard d&#8217;IE dans mon Sharepoint, et j&#8217;ai remarqué que les fonctions <code>ProcessImn()</code> et <code>IMNRC()</code> (l&#8217;une appelant l&#8217;autre) causaient un plantage d&#8217;IE avec un CPU qui montait en charge, et cela pour les pages qui contiennent un grand nombre de personnes et donc de bulles de présence (typiquement une liste AllItems avec des colonnes qui montrent cette information).<br />
J&#8217;ai donc décidé de créer une alternative à l&#8217;affichage de la présence dans Sharepoint en utilisant mes propres fonctions.</p>
<p>Le résultat est le suivant :</p>
<pre class="brush: javascript">
/* on commence par supprimer les deux fonctions qui posent problèmes */
function IMNRC() {}
function ProcessImn() {}
var nameCtrl; // on s'assure de définir nameCtrl
var presence={}; // on crée un objet presence qui va nous servir à mettre en cache l'état de chaque individu
// Cette fonction fait apparaitre un menu/popup avec les informations de présence de l'utilisateur
function showIMMenu() {
  var el=window.event.srcElement;
  var pos=el.getBoundingClientRect();
  // on place le menu en question à la position pos.left et pos.top
  nameCtrl.ShowOOUI(el.getAttribute("sip"), 0, pos.left, pos.top);
}

// Cette fonction va cacher le menu
function hideIMMenu() { nameCtrl.HideOOUI() }

// Cette fonction va permettre de modifier la bulle avec celle qui correspond à l'état de présence de l'utilisateur
function ChangeIMPresence(sip, state, imgID) {
  if (presence[imgID] == state) return;
  presence[imgID]=state;
  var imgIM=document.getElementsByName(imgID);
  for (var i=0; i&lt;imgIM.length; i++) {
    var alt="",src="imnhdr.gif"; // default image (grey)
    switch(state) {
      case 0: alt="Online"; src="imnon.png"; break;
      case 1: alt="Offline"; src="imnoff.png"; break;
      case 2: alt="Away"; src="imnaway.png"; break;
      case 4: alt="Be Right Back"; src="imnaway.png"; break;
      case 3: alt="Busy"; src="imnbusy.png"; break;
      case 5: alt="On the Phone"; src="imnbusy.png"; break;
      case 6: alt="Out to Lunch"; src="imnaway.png"; break;
      default: alt="Unknown"; src="imnhdr.gif";
    }
    imgIM[i].src="http://your_sharepoint/_layouts/images/"+src;
    imgIM[i].alt=alt;
  }
}

// Maintenant on initialise l'objet ActiveX
function initIMPresence() {
  if (typeof ActiveXObject == "function") { // seulement pour IE
    if (typeof nameCtrl=="undefined") nameCtrl=new ActiveXObject('Name.NameCtrl.1');
    var imgIM=document.getElementsByName("imnmark"); // toutes les bulles de présence ont le nom "imnmark"
    for (var i=0; i&lt;imgIM.length; i++) {
      var sip=imgIM[i].getAttribute("sip"); // l'attribut "sip" retourne l'information que l'on souhaite
      if (sip!=null) {
        sip=sip.slice(4);
        var state=nameCtrl.GetStatus(sip, "imnmark_"+sip); // retourne la présence basée sur le SIP (adresse email)
        nameCtrl.OnStatusChange=ChangeIMPresence;
        imgIM[i].src="http://your_sharepoint/_layouts/images/imnhdr.gif";
        imgIM[i].alt="Unknown";
        imgIM[i].name+="_"+sip;
        imgIM[i].onclick=showIMMenu;
        imgIM[i].onmouseover=showIMMenu; // quand on passe la souris au-dessus d'une bulle on verra le menu
        imgIM[i].onmouseout=hideIMMenu;
      }
    }
  }
}

// et on lance tout ça !
initIMPresence();
</pre>
<p>En ajoutant ce bout de code à ma masterpage j&#8217;ai pu conserver les bulles de présence tout en évitant un plantage d&#8217;IE <img src='http://blog.kodono.info/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2012/01/23/alternatives-a-imnrc-et-processimn-pour-determiner-la-presence-dune-personne-sharepoint/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DOMContentLoaded pour cross browser (multi-navigateurs) [Javascript]</title>
		<link>http://blog.kodono.info/wordpress/2012/01/23/domcontentloaded-pour-cross-browser-multi-navigateurs-javascript/</link>
		<comments>http://blog.kodono.info/wordpress/2012/01/23/domcontentloaded-pour-cross-browser-multi-navigateurs-javascript/#comments</comments>
		<pubDate>Mon, 23 Jan 2012 14:57:18 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=899</guid>
		<description><![CDATA[Après avoir parcouru le Net pour un évènement DOMContentLoaded (qui s&#8217;enclenche avant window.onload) qui puisse fonctionner sur tous les navigateurs (et en particulier IE7), j&#8217;ai pu trouver un article qui explique bien les différentes étapes et la solution adaptée : http://javascript.info/tutorial/onload-ondomcontentloaded Pour résumer la fonction à utiliser est : function bindReady(handler){ var called = false [...]]]></description>
			<content:encoded><![CDATA[<p>Après avoir parcouru le Net pour un évènement <code>DOMContentLoaded</code> (qui s&#8217;enclenche avant <code>window.onload</code>) qui puisse fonctionner sur tous les navigateurs (et en particulier IE7), j&#8217;ai pu trouver un article qui explique bien les différentes étapes et la solution adaptée : <a href="http://javascript.info/tutorial/onload-ondomcontentloaded" title="DOMContentLoaded cross browser article">http://javascript.info/tutorial/onload-ondomcontentloaded</a></p>
<p>Pour résumer la fonction à utiliser est :</p>
<pre class="brush: javascript">function bindReady(handler){
  var called = false
  function ready() {
    if (called) return
    called = true
    handler()
  }
  if ( document.addEventListener ) { // native event
    document.addEventListener( "DOMContentLoaded", ready, false )
  } else if ( document.attachEvent ) {  // IE
    try { var isFrame = window.frameElement != null } catch(e) {}

    // IE, the document is not inside a frame
    if ( document.documentElement.doScroll &#038;&#038; !isFrame ) {
      function tryScroll(){
        if (called) return
        try {
          document.documentElement.doScroll("left")
          ready()
        } catch(e) {
          setTimeout(tryScroll, 10)
        }
      }
      tryScroll()
    }

    // IE, the document is inside a frame
    document.attachEvent("onreadystatechange", function(){
      if ( document.readyState === "complete" ) {
        ready()
      }
    })
  }

  // Old browsers
  if (window.addEventListener)
    window.addEventListener('load', ready, false)
  else if (window.attachEvent)
    window.attachEvent('onload', ready)
  else {
    var fn = window.onload // very old browser, copy old onload
    window.onload = function() { // replace by new onload and call the old one
      fn &#038;&#038; fn()
      ready()
    }
  }
}</pre>
<p>A partir de là vous pouvez appeler votre fonction avec :</p>
<pre class="brush: javascript">bindReady(function() {
  /* quelque chose qui doit se lancer après le chargement du DOM */
});</pre>
<p>Dans le cas où vous voudriez appeler plusieurs fonctions, alors vous pouvez simplement faire quelque chose comme :</p>
<pre class="brush: javascript">
var fonctionsACharger=[];
bindReady(function() {
  for (var i=0; i&lt;functionsACharger.length;i++) functionsACharger[i]();
});

/* on ajoute les fonctions à charger dans notre tableau */
fonctionsACharger.push(function() {
  /* première chose à faire */
});
fonctionsACharger.push(function() {
  alert("Toutes les fonctions sont maintenant chargées !");
});
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2012/01/23/domcontentloaded-pour-cross-browser-multi-navigateurs-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IE9 en mode standard et Sharepoint&#8230; bug du bouton OK [Sharepoint]</title>
		<link>http://blog.kodono.info/wordpress/2012/01/18/ie9-en-mode-standard-et-sharepoint-2003-bug-du-bouton-ok-sharepoint/</link>
		<comments>http://blog.kodono.info/wordpress/2012/01/18/ie9-en-mode-standard-et-sharepoint-2003-bug-du-bouton-ok-sharepoint/#comments</comments>
		<pubDate>Wed, 18 Jan 2012 17:59:16 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Navigateur]]></category>
		<category><![CDATA[Niveau expert]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[IE9]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[sharepoint]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=892</guid>
		<description><![CDATA[[niveau expert] Si vous passez IE9 en mode standard avec Sharepoint vous risquez d&#8217;avoir le bouton OK des formulaires qui ne fonctionne plus&#8230; Après avoir debuggué le bazar j&#8217;ai découvert qu&#8217;un des fichiers (&#171;&#160;/_layouts/1033/form.js&#160;&#187;) Javascript utilise document.frames() au lieu de document.frames[]. Si cela fonctionne sur les anciens navigateurs, ce n&#8217;est plus le cas pour IE9 [...]]]></description>
			<content:encoded><![CDATA[<p>[niveau expert]</p>
<p>Si vous passez IE9 en mode standard avec Sharepoint vous risquez d&#8217;avoir le bouton OK des formulaires qui ne fonctionne plus&#8230; Après avoir debuggué le bazar j&#8217;ai découvert qu&#8217;un des fichiers (&laquo;&nbsp;/_layouts/1033/form.js&nbsp;&raquo;) Javascript utilise <code>document.frames()</code> au lieu de <code>document.frames[]</code>. Si cela fonctionne sur les anciens navigateurs, ce n&#8217;est plus le cas pour IE9 en mode standard, du coup il retourne un &laquo;&nbsp;Function expected&nbsp;&raquo;.</p>
<p>Il y a deux fonctions incriminées <code>RTE_GetEditorIFrame()</code> et <code>RTE_DD_GetMenuFrame()</code>. Il suffit d&#8217;utiliser les commentaires conditionnels pour indiquer que lorsqu&#8217;on utilise IE9 alors on remplace ces deux fonctions par :</p>
<pre class="brush: javascript">function RTE_GetEditorIFrame(strBaseElementID)
{
	var ifmEditor=null;
	var doc=document;
	if ((null !=doc.frames) &#038;&#038; (doc.frames.length==0) &#038;&#038; (doc.parentWindow.parent !=null))
	{
		doc=doc.parentWindow.parent.document;
	}
	if ((null !=doc.frames) &#038;&#038; (doc.frames.length > 0))
	{
		var ifmContainer=doc.getElementById(RTE_GetEditorIFrameID(strBaseElementID));
		if (ifmContainer !=null)
		{
			ifmEditor=doc.frames[RTE_GetEditorIFrameID(strBaseElementID)];
		}
	}
	return ifmEditor;
}
function RTE_DD_GetMenuFrame()
{
	var ifmMenu=null;
	var elemMenu=RTE_DD_GetMenuElement();
	if (null !=elemMenu)
	{
		if (document.frames.length > 0)
		{
			ifmMenu=document.frames[g_strRTETextEditorPullDownMenuID];
		}
		else
		{
			if ((document.parentWindow !=null) &#038;&#038; (document.parentWindow.frames !=null))
			{
				ifmMenu=document.parentWindow.parent.document.frames[g_strRTETextEditorPullDownMenuID];
			}
		}
	}
	if (null==ifmMenu)
	{
		if (g_fRTEFirstCallToGetMenu)
		{
			g_fRTEFirstCallToGetMenu=false;
			return null;
		}
	}
	return ifmMenu;
}
</pre>
<p>Ainsi <code>document.frames</code> est bien appelé comme un objet et non comme une fonction !</p>
<p><strong>A noter cependant qu&#8217;il existe des tonnes de bugs avec IE9 et Sharepoint 2003/2007. Il est donc conseillé d&#8217;utiliser le mode de compatibilité en IE8</strong> si vous ne voulez pas passer des heures à trouver l&#8217;origine des problèmes et à les corriger :</p>
<pre class="brush: html">&lt;meta http-equiv="X-UA-Compatible" content="IE=8"/></pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2012/01/18/ie9-en-mode-standard-et-sharepoint-2003-bug-du-bouton-ok-sharepoint/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Si vous avez l&#8217;erreur &#171;&#160;The security validation for this page is invalid&#160;&#187; [Sharepoint]</title>
		<link>http://blog.kodono.info/wordpress/2011/12/23/si-vous-avez-lerreur-the-security-validation-for-this-page-is-invalid-sharepoint/</link>
		<comments>http://blog.kodono.info/wordpress/2011/12/23/si-vous-avez-lerreur-the-security-validation-for-this-page-is-invalid-sharepoint/#comments</comments>
		<pubDate>Fri, 23 Dec 2011 11:14:34 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[Astuce]]></category>
		<category><![CDATA[error message]]></category>
		<category><![CDATA[sharepoint]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=818</guid>
		<description><![CDATA[&#171;&#160;The security validation for this page is invalid. Click Back in your Web browser, refresh the page, and try your operation again.&#160;&#187; Si Sharepoint vous donne ce joli message d&#8217;erreur lorsque vous communiquez avec un de ses web services, alors il est possible que vous ayez oublié d&#8217;ajouter un header &#171;&#160;SOAPAction&#160;&#187; avec le nom du [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>&laquo;&nbsp;The security validation for this page is invalid. Click Back in your Web browser, refresh the page, and try your operation again.&nbsp;&raquo;</p></blockquote>
<p>Si Sharepoint vous donne ce joli message d&#8217;erreur lorsque vous communiquez avec un de ses web services, alors il est possible que vous ayez oublié d&#8217;ajouter un <em>header</em> &laquo;&nbsp;SOAPAction&nbsp;&raquo; avec le nom du service associé.</p>
<p>Prenons l&#8217;exemple du web service <em>lists.asmx</em> et de l&#8217;action &laquo;&nbsp;UpdateListItems&nbsp;&raquo;. Si vous allez sur l&#8217;URL suivante <a href="http://votre_sharepoint/_vti_bin/lists.asmx?op=UpdateListItem">http://votre_sharepoint/_vti_bin/lists.asmx?op=UpdateListItem</a>s vous verrez la SOAPAction qu&#8217;il faut définir (cliquez pour agrandir) :<br />
<a href="http://blog.kodono.info/wordpress/wp-content/uploads/2011/12/20111223_Sharepoint_Web_Service.png"><img src="http://blog.kodono.info/wordpress/wp-content/uploads/2011/12/20111223_Sharepoint_Web_Service-300x166.png" alt="Copie d&#039;écran du web service lists.asmx" title="20111223_Sharepoint_Web_Service" width="300" height="166" class="aligncenter size-medium wp-image-819" /></a></p>
<p>Dans l&#8217;exemple ci-dessus il faut donc définir l&#8217;header &laquo;&nbsp;SOAPAction&nbsp;&raquo; avec la valeur &laquo;&nbsp;http://schemas.microsoft.com/sharepoint/soap/UpdateListItems&nbsp;&raquo;.<br />
Si vous utilisez l&#8217;AJAX de jQuery cela donnera quelque chose comme ça :</p>
<pre class="brush: javascript">
jQuery.ajax({
        url: "http://your_sharepoint/_vti_bin/lists.asmx",
        type: "POST",
        dataType: "xml",
        data: soapEnv,
        beforeSend: function(xhr) { xhr.setRequestHeader('SOAPAction', 'http://schemas.microsoft.com/sharepoint/soap/UpdateListItems'); },
        contentType: "text/xml; charset=\"utf-8\""
    });
</pre>
<p>Si vous utilisez l&#8217;add-on Firefox <a href="https://addons.mozilla.org/fr/firefox/addon/poster/">Poster</a>, alors utilisez l&#8217;onglet &laquo;&nbsp;Headers&nbsp;&raquo;.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2011/12/23/si-vous-avez-lerreur-the-security-validation-for-this-page-is-invalid-sharepoint/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Retrouver les styles CSS appliqués à un élément du DOM [Javascript]</title>
		<link>http://blog.kodono.info/wordpress/2011/12/22/retrouver-les-styles-css-appliques-a-un-element-du-dom-javascript/</link>
		<comments>http://blog.kodono.info/wordpress/2011/12/22/retrouver-les-styles-css-appliques-a-un-element-du-dom-javascript/#comments</comments>
		<pubDate>Thu, 22 Dec 2011 13:55:31 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=814</guid>
		<description><![CDATA[[niveau intermédiaire] Voici une fonction (qui mériterait quelques optimisations) qui va vous permettre de trouver tous les styles appliqués à un élément : function getStyle(e) { var arr=(typeof window.getComputedStyle == "function" ? window.getComputedStyle(e) : e.currentStyle ); // IE will use the "currentStyle" var res=[]; $.each(arr, function(k,v) { // ici j'utilise le "each" de jQuery simplement [...]]]></description>
			<content:encoded><![CDATA[<p>[niveau intermédiaire]</p>
<p>Voici une fonction (qui mériterait quelques optimisations) qui va vous permettre de trouver tous les styles appliqués à un élément :</p>
<pre class="brush: javascript">
function getStyle(e) {
    var arr=(typeof window.getComputedStyle == "function" ? window.getComputedStyle(e) : e.currentStyle ); // IE will use the "currentStyle"
    var res=[];
    $.each(arr, function(k,v) { // ici j'utilise le "each" de jQuery simplement parce que c'est plus pratique/simple que le for-in
      if (typeof window.getComputedStyle == "undefined") {
        var kNoCamel=k.replace(/([A-Z])/g, "-$1").toLowerCase(); // sous IE on a des noms de propriétés au format camelCase
        k=v;
        v=kNoCamel;
      }
      if (v.charAt(0) != "-") {
        var vSlice = v.slice(0,7);
        // ici on va chercher à conserver que quelques propriétés CSS bien particulières
        var ok = (vSlice=="border-"||vSlice=="margin-"||vSlice=="padding");
        switch(v) {
          case "background-color":
          case "color":
          case "font-style":
          case "font-weight":
          case "font-size":
          case "font-family":
          case "width":
          case "height":
          case "vertical-align":
          case "text-align":
          case "text-decoration": ok=true;
        }
        if (ok) {
          if (typeof window.getComputedStyle == "function") {
            var vCamel=(v.search("-") != -1 ? v.replace(/(-)(.)/g,function(c) { return c[1].toUpperCase();}) : v); // pour trouver les valeurs associés aux propriétés on se change en camelCase
            res.push(v+":"+arr[vCamel]);
          } else {
            res.push(v+":"+k);
          }
      }
    }
  });
  return res.join(";");
};

alert(getStyle(document.getElementById('test')));
/* qui retournera par exemple:
background-color:transparent;border-bottom-color:rgb(128, 128, 128);
border-bottom-left-radius:0px;border-bottom-right-radius:0px;
border-bottom-style:none;border-bottom-width:0px;border-collapse:collapse;
border-left-color:rgb(128, 128, 128);border-left-style:none;
border-left-width:1px;border-right-color:rgb(128, 128, 128);
border-right-style:none;border-right-width:0px;border-spacing:2px 2px;
border-top-color:rgb(128, 128, 128);border-top-left-radius:0px;
border-top-right-radius:0px;border-top-style:none;border-top-width:1px;
color:rgb(0, 0, 0);font-family:verdana;font-size:16px;font-style:normal;
font-weight:400;height:3738px;margin-bottom:0px;margin-left:0px;margin-right:0px;
margin-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px;
padding-top:0px;text-align:start;text-decoration:none;vertical-align:baseline;width:1756px
*/
</pre>
<p><strong>Edit:</strong> J&#8217;ai découvert qu&#8217;il existe un plugin pour jQuery qui fait un peu près la même chose (sauf qu&#8217;il retourne TOUTES les propriétés et qu&#8217;il est bien <a href="http://jsperf.com/copycss-vs-mine" title="Test comparatif fait sur jsperf.com">plus lent à l&#8217;exécution</a>) : <a href="http://upshots.org/javascript/jquery-copy-style-copycss" title="jQuery CopyCSS plugin">http://upshots.org/javascript/jquery-copy-style-copycss</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2011/12/22/retrouver-les-styles-css-appliques-a-un-element-du-dom-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Trouver l&#8217;heure et la date en Javascript d&#8217;un autre timezone [programmation]</title>
		<link>http://blog.kodono.info/wordpress/2011/11/02/trouver-lheure-et-la-date-en-javascript-dun-autre-timezone-programmation/</link>
		<comments>http://blog.kodono.info/wordpress/2011/11/02/trouver-lheure-et-la-date-en-javascript-dun-autre-timezone-programmation/#comments</comments>
		<pubDate>Wed, 02 Nov 2011 15:49:41 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau débutant]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=766</guid>
		<description><![CDATA[Pour récupérer l&#8217;heure courante d&#8217;un autre timezone voici comment faire (ici je prends l&#8217;exemple de CST qui est UTC-5, c&#8217;est-à-dire -300 minutes) : new Date(new Date(new Date().toUTCString()).setMinutes(-300)); Ensuite il faudra utiliser les fonctions getUTC* pour avoir les informations relatives à la nouvelle heure : var dLocal = new Date(); // -> Thu Nov 03 2011 [...]]]></description>
			<content:encoded><![CDATA[<p>Pour récupérer l&#8217;heure courante d&#8217;un autre timezone voici comment faire (ici je prends l&#8217;exemple de CST qui est UTC-5, c&#8217;est-à-dire -300 minutes) :</p>
<pre class="brush: javascript">new Date(new Date(new Date().toUTCString()).setMinutes(-300));</pre>
<p>Ensuite il faudra utiliser les fonctions <em>getUTC*</em> pour avoir les informations relatives à la nouvelle heure :</p>
<pre class="brush: javascript">var dLocal = new Date(); // -> Thu Nov 03 2011 09:50:19 GMT+0100
var dOffset = new Date(new Date(new Date().toUTCString()).setMinutes(-300));
var offsetHours = dOffset.getUTCHours(); // -> 3</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2011/11/02/trouver-lheure-et-la-date-en-javascript-dun-autre-timezone-programmation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Envoyer un email à plusieurs personnes via un Workflow [Sharepoint]</title>
		<link>http://blog.kodono.info/wordpress/2011/10/28/envoyer-un-email-a-plusieurs-personnes-via-un-workflow-sharepoint/</link>
		<comments>http://blog.kodono.info/wordpress/2011/10/28/envoyer-un-email-a-plusieurs-personnes-via-un-workflow-sharepoint/#comments</comments>
		<pubDate>Fri, 28 Oct 2011 13:34:31 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau débutant]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[sharepoint]]></category>
		<category><![CDATA[workflow]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=764</guid>
		<description><![CDATA[Avec Sharepoint et les Workflow il est possible d&#8217;envoyer des emails à une personne (ou un groupe) en se basant sur un champs &#171;&#160;Personne&#160;&#187; de la Liste. Il est également possible d&#8217;envoyer un email à plusieurs personnes d&#8217;un coup grâce à ce même champs, mais en choisissant l&#8217;option &#171;&#160;Sélection Multiple&#160;&#187;. Attention cependant: lorsque vous créez [...]]]></description>
			<content:encoded><![CDATA[<p>Avec Sharepoint et les Workflow il est possible d&#8217;envoyer des emails à une personne (ou un groupe) en se basant sur un champs &laquo;&nbsp;Personne&nbsp;&raquo; de la Liste. Il est également possible d&#8217;envoyer un email à plusieurs personnes d&#8217;un coup grâce à ce même champs, mais en choisissant l&#8217;option &laquo;&nbsp;Sélection Multiple&nbsp;&raquo;.<br />
Attention cependant: lorsque vous créez le Workflow qui va envoyer l&#8217;email, il ne va pas vous proposer le champs en question tant qu&#8217;il est en &laquo;&nbsp;Sélection Multiple&nbsp;&raquo; ! Pour que cela fonctionne, il faut désactiver la sélection multiple le temps de configurer le workflow, puis l&#8217;autoriser de nouveau.</p>
<p>C&#8217;est donc simplement l&#8217;interface utilisateur de Sharepoint Designer qui bloque, alors que c&#8217;est techniquement possible.</p>
<p>Plus d&#8217;informations : <a href="http://social.msdn.microsoft.com/forums/en-US/sharepointworkflow/thread/ebcb81ec-ba36-4a4c-bd01-26dc2c4d0913/">http://social.msdn.microsoft.com/forums/en-US/sharepointworkflow/thread/ebcb81ec-ba36-4a4c-bd01-26dc2c4d0913/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2011/10/28/envoyer-un-email-a-plusieurs-personnes-via-un-workflow-sharepoint/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Supprimer les tags &lt;script&gt; d&#8217;une chaine de caractères [javascript]</title>
		<link>http://blog.kodono.info/wordpress/2011/10/18/supprimer-les-tags-script-dune-chaine-de-caracteres-javascript/</link>
		<comments>http://blog.kodono.info/wordpress/2011/10/18/supprimer-les-tags-script-dune-chaine-de-caracteres-javascript/#comments</comments>
		<pubDate>Tue, 18 Oct 2011 12:05:11 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau débutant]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[regexp]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=749</guid>
		<description><![CDATA[Il suffit d&#8217;utiliser la chaine RegEx suivante : var myText = 'blah blah &#60;script type="text/javascript">foo=bar;&#60;/script>blah blah'; var myStripText = myText.replace(/&#60;script.*?>[\s\S]*?&#60;\/.*?script>/gi,""); console.log(myStripText); // -> 'blah blah blah blah' On peut également utiliser une expression régulière pour supprimer les liens javascripts : var myText = 'blah blah &#60;a href="javascript:alert(gniii)">foo&#60;/a>blah blah'; var myStripText = myText.replace(/javascript.*:[^"]*/gi,""); console.log(myStripText); // -> [...]]]></description>
			<content:encoded><![CDATA[<p>Il suffit d&#8217;utiliser la chaine RegEx suivante :</p>
<pre class="brush:javascript">var myText = 'blah blah &lt;script type="text/javascript">foo=bar;&lt;/script>blah blah';
var myStripText = myText.replace(/&lt;script.*?>[\s\S]*?&lt;\/.*?script>/gi,"");
console.log(myStripText); // -> 'blah blah blah blah'</pre>
<p>On peut également utiliser une expression régulière pour supprimer les liens javascripts :</p>
<pre class="brush:javascript">var myText = 'blah blah &lt;a href="javascript:alert(gniii)">foo&lt;/a>blah blah';
var myStripText = myText.replace(/javascript.*:[^"]*/gi,"");
console.log(myStripText); // -> 'blah blah &lt;a href="">foo</a>blah blah'</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2011/10/18/supprimer-les-tags-script-dune-chaine-de-caracteres-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Comment déboguer son code Javascript ? [programmation]</title>
		<link>http://blog.kodono.info/wordpress/2011/08/19/comment-deboguer-son-code-javascript-programmation/</link>
		<comments>http://blog.kodono.info/wordpress/2011/08/19/comment-deboguer-son-code-javascript-programmation/#comments</comments>
		<pubDate>Fri, 19 Aug 2011 14:04:19 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Debug]]></category>
		<category><![CDATA[Niveau expert]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=716</guid>
		<description><![CDATA[Évidemment vous pouvez utiliser Firebug (add-on Firefox) pour trouver les problèmes dans votre code, que ce soit des erreurs de syntax (syntax error) ou autre. Même s&#8217;il semble qu&#8217;avec la version de Firebug 1.8.x l&#8217;information fournie ne soit plus autant utile (mais espérons que ce ne soit que temporaire). Il existe des sites web qui [...]]]></description>
			<content:encoded><![CDATA[<p>Évidemment vous pouvez utiliser <a href="http://getfirebug.com/">Firebug</a> (add-on Firefox) pour trouver les problèmes dans votre code, que ce soit des erreurs de syntax (<i>syntax error</i>) ou autre. Même s&#8217;il semble qu&#8217;avec la version de Firebug 1.8.x l&#8217;information fournie ne soit plus autant utile (mais espérons que ce ne soit que temporaire).</p>
<p>Il existe des sites web qui fournissent un débogage du Javascript, et mon préféré est <a href="http://www.javascriptlint.com/online_lint.php">http://www.javascriptlint.com/</a>. Il vous montrera rapidement ce qu&#8217;il ne va pas dans ce que vous avez entré : oubli de parenthèse, de point-virgule, mauvaise déclaration, &#8230;</p>
<p>De plus si vous utilisez <a href="http://notepad-plus-plus.org/fr/">Notepad++</a> ou un autre éditeur, il est facile d&#8217;adjoindre la puissance de <a href="http://www.javascriptlint.com/download.htm">JSLint à votre programme préféré</a>. Dans ce <a href="http://stackoverflow.com/questions/1046810/using-jslint-in-notepad">thread</a> on vous explique tout.<br />
En l&#8217;occurrence voici comment faire pour Notepad++ :</p>
<ol>
<li>Télécharger <a href="http://www.javascriptlint.com/download.htm">la version pour Windows</a>, puis dézippez le fichier;</li>
<li>Maintenant ouvrez Notepad++, puis dans le menu <em>Plugins</em> vous trouvez <em>NppExec</em>, et après <em>Execute&#8230;</em> (ou touche F6);</li>
<li>Dans la zone qui apparait entrez la commande suivante (en supposant que vous ayez mis le fichier dézipppé dans &laquo;&nbsp;C:\Program Files\JavascriptLint\&nbsp;&raquo;) :<br />
<code>"C:\Program Files\JavascriptLint\jsl.exe" -conf "C:\Program Files\JavascriptLint\jsl.default.conf" -process "$(FULL_CURRENT_PATH)"</code></li>
<li>Cliquez sur &laquo;&nbsp;Save&#8230;&nbsp;&raquo; et donnez un nom à cette commande;</li>
<li>Vous pouvez désormais utilisez JSLint directement dans Notepad++</li>
<li>Dans le fichier <em>jsl.default.conf</em> vous trouverez les options et les warnings à supprimer</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2011/08/19/comment-deboguer-son-code-javascript-programmation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tester les performances d&#8217;un code Javascript via un benchmark [performance]</title>
		<link>http://blog.kodono.info/wordpress/2011/08/19/tester-les-performances-dun-code-javascript-via-un-benchmark-performance/</link>
		<comments>http://blog.kodono.info/wordpress/2011/08/19/tester-les-performances-dun-code-javascript-via-un-benchmark-performance/#comments</comments>
		<pubDate>Fri, 19 Aug 2011 13:50:10 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=709</guid>
		<description><![CDATA[Je vous conseille de tester régulièrement votre code Javascript pour voir les performances par rapport à d&#8217;autres commandes. Il arrive qu&#8217;on hésite entre deux (ou plus!) façons de faire. Il existe le populaire http://jsperf.com/ qui offre la possibilité de tester autant de bouts de code que l&#8217;on souhaite, en appelant même quelques framework bien connus [...]]]></description>
			<content:encoded><![CDATA[<p>Je vous conseille de tester régulièrement votre code Javascript pour voir les performances par rapport à d&#8217;autres commandes. Il arrive qu&#8217;on hésite entre deux (ou plus!) façons de faire.</p>
<p>Il existe le populaire <a href="http://jsperf.com/">http://jsperf.com/</a> qui offre la possibilité de tester autant de bouts de code que l&#8217;on souhaite, en appelant même quelques framework bien connus (comme jQuery).</p>
<p>Mais si vous avez des besoins un peu plus particulier, ou vous devez travailler sur un environnement restreint, alors il est possible d&#8217;utiliser <a href="http://www.broofa.com/Tools/JSLitmus/">JSLitmus</a>. La façon de l&#8217;utiliser est <strong>incroyablement simple</strong> :</p>
<pre class="brush:javascript">&lt;script src="JSLitmus.js">&lt;/script>
&lt;script>
JSLitmus.test('Mon premier test', function() { /* do something */ });
JSLitmus.test('Mon second test', function() { /* do something else */ });
&lt;/script></pre>
<p>Cela fait apparaître un bouton &laquo;&nbsp;Run tests&nbsp;&raquo; avec un petit tableau. Une fois le test fini le tableau et un graphique vous donnent les informations nécessaires, et en l&#8217;occurrence plus le chiffre (nombre d&#8217;opérations/sec) est grand et mieux c&#8217;est.</p>
<p>Voici un exemple qui montre que l&#8217;utilisation de <code>search</code> est bien plus rapide que de déclarer une <code>RegExp</code> puis appeler <code>match</code> :</p>
<pre class="brush:javascript">&lt;html>
&lt;head>
&lt;script src="http://www.broofa.com/Tools/JSLitmus/JSLitmus.js">&lt;/script>
&lt;/head>
&lt;body>
&lt;script>
JSLitmus.test('Mon premier test', function() { var regExp = new RegExp("pouet$"); var ok = ("pouet".match(regExp) != null); });
JSLitmus.test('Mon deuxième test', function() { var ok = ("pouet".search("pouet") != -1); });
&lt;/script>
&lt;/body>&lt;/html></pre>
<p>Résultat :<br />
<img src="http://blog.kodono.info/wordpress/wp-content/uploads/2011/08/JSLitmus-238x300.png" alt="" title="JSLitmus" width="238" height="300" class="aligncenter size-medium wp-image-710" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2011/08/19/tester-les-performances-dun-code-javascript-via-un-benchmark-performance/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>L&#8217;opérateur typeof en Javascript [programmation]</title>
		<link>http://blog.kodono.info/wordpress/2011/08/14/loperateur-typeof-en-javascript-programmation/</link>
		<comments>http://blog.kodono.info/wordpress/2011/08/14/loperateur-typeof-en-javascript-programmation/#comments</comments>
		<pubDate>Sun, 14 Aug 2011 18:49:56 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau débutant]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[Performance]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=687</guid>
		<description><![CDATA[Si vous avez déjà essayé d&#8217;utiliser typeof en Javascript pour trouver le type d&#8217;un objet, vous avez dû vous rendre compte que cet opérateur n&#8217;aide pas beaucoup&#8230;. Le typeof par défaut de Javascript Déjà, comme typeof est un opérateur, vous n&#8217;avez pas besoin d&#8217;utiliser des parenthèses ou une quelconque autre décoration. Ainsi on aura : [...]]]></description>
			<content:encoded><![CDATA[<p>Si vous avez déjà essayé d&#8217;utiliser <code>typeof</code> en Javascript pour trouver le type d&#8217;un objet, vous avez dû vous rendre compte que cet opérateur n&#8217;aide pas beaucoup&#8230;.</p>
<h1>Le typeof par défaut de Javascript</h1>
<p>Déjà, comme <code>typeof</code> est un opérateur, vous n&#8217;avez pas besoin d&#8217;utiliser des parenthèses ou une quelconque autre décoration.<br />
Ainsi on aura :</p>
<pre class="brush:javascript">typeof 2; // -> "number"
typeof "Kodono"; // -> "string"</pre>
<p>On peut remarquer qu&#8217;ici <code>typeof</code> nous a bien donné ce qu&#8217;on attendait&#8230; mais voilà ce qu&#8217;il se passe avec d&#8217;autres exemples :</p>
<pre class="brush:javascript">typeof []; // -> "object"
typeof new Boolean(true); // -> "object"
typeof /a/; // -> "object"
typeof new Date(); // -> "object"
typeof null; // -> "object"</pre>
<p>Comme on peut le voir, l&#8217;opérateur va fournir un &laquo;&nbsp;object&nbsp;&raquo; dans de nombreuses situations, ce qui n&#8217;aide pas du tout.</p>
<h1>Créer un meilleur typeof</h1>
<p>Pour faire court, on peut appliquer <code>Object.prototype.toString.call</code> à un objet qui va retourner une chaine au format &laquo;&nbsp;[object <i>Class</i>]&laquo;&nbsp;. Quelques exemples :</p>
<pre class="brush:javascript">Object.prototype.toString.call(new Number(2)); // -> [object Number]
Object.prototype.toString.call(new Date()); // -> [object Date]
Object.prototype.toString.call(/a/); // -> [object RegExp]</pre>
<p>Maintenant que l&#8217;on sait ça on peut créer notre propose fonction <code>typeOf</code> (en sachant que <code>Object.prototype</code> peut se raccourcir par <code>({})/</code>).<br />
On trouve sur Internet différentes façons de faire que je vais vous proposer.</p>
<h2 style="float:none; padding-top:10px">La plus lente</h2>
<p>Elle n&#8217;est pas très rapide (dûe à l&#8217;utilisation des expressions régulières), mais elle est très courte :</p>
<pre class="brush:javascript">function typeOf(obj){return({}).toString.call(obj).match(/\s(\w+)/)[1]}

console.log(typeOf(new Number(2))); // -> Number
console.log(typeOf(new Date())); // -> Date
console.log(typeOf("test")); // -> String
console.log(typeOf(null)); // -> Null
console.log(typeOf(/a/)); // -> RegExp
console.log(typeOf([])); // -> Array
console.log(typeOf(function(){})); // -> Function</pre>
<h2 style="float:none; padding-top:10px">jQuery.type</h2>
<p>Si vous utilisez déjà <em>jQuery</em>, vous pouvez utiliser la fonction <a href="http://api.jquery.com/jQuery.type/">jQuery.type</a> qui propose une fonction assez rapide et efficace.<br />
Ils utilisent la méthode suivante :</p>
<pre class="brush:javascript">
function typeOf(obj){
  var c2t={"[object Boolean]":"Boolean","[object Number]":"Number","[object String]":"String","[object Function]":"Function","[object Array]":"Array","[object Date]":"Date","[object RegExp]":"RegExp","[object Object]":"Object"};
  return obj==null?String(obj):c2t[({}).toString.call(obj)]||"object";
}

console.log(typeOf(new Number(2))); // -> Number
console.log(typeOf(new Date())); // -> Date
console.log(typeOf("test")); // -> String
console.log(typeOf(null)); // -> Null
console.log(typeOf(/a/)); // -> RegExp
console.log(typeOf([])); // -> Array
console.log(typeOf(function(){})); // -> Function</pre>
<h2 style="float:none; padding-top:10px">La plus courte et rapide</h2>
<p>Celle-ci ne prend que quelques caractères, et se veut <a href="http://jsperf.com/typeof-test-case">rapide en plus</a> !</p>
<pre class="brush:javascript">function typeOf(obj) {return({}).toString.call(obj).slice(8,-1)}

console.log(typeOf(new Number(2))); // -> Number
console.log(typeOf(new Date())); // -> Date
console.log(typeOf("test")); // -> String
console.log(typeOf(null)); // -> Null
console.log(typeOf(/a/)); // -> RegExp
console.log(typeOf([])); // -> Array
console.log(typeOf(function(){})); // -> Function</pre>
<h1>Conclusion</h2>
<p>Si vous utilisez déjà jQuery dans votre code, alors vous pouvez faire confiance à <code>jQuery.type</code>, sinon je vous conseille la dernière fonction proposée :</p>
<pre class="brush:javascript">function typeOf(obj) {return({}).toString.call(obj).slice(8,-1)}</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2011/08/14/loperateur-typeof-en-javascript-programmation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Retrouver l&#8217;url d&#8217;une page JSP [programmation]</title>
		<link>http://blog.kodono.info/wordpress/2011/08/14/retrouver-url-page-jsp/</link>
		<comments>http://blog.kodono.info/wordpress/2011/08/14/retrouver-url-page-jsp/#comments</comments>
		<pubDate>Sun, 14 Aug 2011 16:50:18 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jsp]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=682</guid>
		<description><![CDATA[Dans une page (scriptlet) JSP vous pouvez exécuter du Java grâce aux balises &#60;% %&#62;. C&#8217;est avec cela qu&#8217;on peut retrouver l&#8217;url de la page en cours : &#60;%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %&#62; &#60;%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %&#62; &#60;!DOCTYPE html&#62; &#60;html&#62; &#60;head&#62;&#60;title&#62;Exemple JSP&#60;/title&#62;&#60;/head&#62; &#60;body&#62; L'url de la page est : &#60;%= HttpUtils.getRequestURL(request).toString() %&#62;?&#60;%= request.getQueryString() %&#62; [...]]]></description>
			<content:encoded><![CDATA[<p>Dans une page (<em>scriptlet</em>) JSP vous pouvez exécuter du Java grâce aux balises <code>&lt;% %&gt;</code>. C&#8217;est avec cela qu&#8217;on peut retrouver l&#8217;url de la page en cours :</p>
<pre class="brush:html">&lt;%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %&gt;
&lt;%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %&gt;
&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;&lt;title&gt;Exemple JSP&lt;/title&gt;&lt;/head&gt;
&lt;body&gt;
L'url de la page est : &lt;%= HttpUtils.getRequestURL(request).toString() %&gt;?&lt;%= request.getQueryString() %&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2011/08/14/retrouver-url-page-jsp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Stocker un mot de passe en PHP grâce à bcrypt [sécurité]</title>
		<link>http://blog.kodono.info/wordpress/2011/08/08/stocker-un-mot-de-passe-en-php-grace-a-bcrypt-securite/</link>
		<comments>http://blog.kodono.info/wordpress/2011/08/08/stocker-un-mot-de-passe-en-php-grace-a-bcrypt-securite/#comments</comments>
		<pubDate>Mon, 08 Aug 2011 17:53:00 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[Sécurité]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=657</guid>
		<description><![CDATA[[niveau: intermédiaire] Il a été démontré que le stockage de mot de passe n&#8217;est pas chose aisée, et que l&#8217;utilisation d&#8217;une méthode de hashage (MD5, SHA-1, etc) n&#8217;est pas parfaite, même avec l&#8217;utilisation d&#8217;un salt. D&#8217;après cette constatation plusieurs articles indiquent que la meilleure méthode reste l&#8217;utilisation de bcrypt, comme on peut le lire dans [...]]]></description>
			<content:encoded><![CDATA[<p>[niveau: intermédiaire]</p>
<p>Il a été démontré que le stockage de mot de passe n&#8217;est pas chose aisée, et que l&#8217;utilisation d&#8217;une méthode de hashage (MD5, SHA-1, etc) n&#8217;est pas parfaite, même avec l&#8217;utilisation d&#8217;un <em>salt</em>. D&#8217;après cette constatation plusieurs articles indiquent que la meilleure méthode reste l&#8217;utilisation de <code>bcrypt</code>, comme on peut le lire dans <a href="http://codahale.com/how-to-safely-store-a-password/">How to safely store a password</a>.</p>
<p>L&#8217;utilisation de <code>bcrypt</code> est assez simple :<br />
1) Télécharger <a href="http://www.openwall.com/phpass/">phpass</a> (fichier .tgz qui contient un fichier <strong>PasswordHash.php</strong>);<br />
2) Appeler <em>PasswordHash.php</em> dans votre page :</p>
<pre class="brush:php">&lt;?php require('includes/PasswordHash.php'); ?></pre>
<p>3) Maintenant vous pouvez utiliser l&#8217;objet PasswordHash comme cela :</p>
<pre class="brush:php">&lt;?php
$password = $_POST["password"];
$hasher = new PasswordHash(8, FALSE);
$hash = $hasher->HashPassword($password);
?></pre>
<p>Et pour vérifier un mot de passe, vous devez utiliser ce petit bout de code :</p>
<pre class="brush:php">&lt;?php // vérification du mot de passe
$password = $_POST["password"];
$password_correct = "password qui vient de la base de données"; /* Le hash stocké précédemment */
$hasher = new PasswordHash(8, FALSE);
$check = $hasher->CheckPassword($password, $password_correct);

if ($check) {
 echo "Password correct!";
}
else {
 echo "Password incorrect...";
}
?></pre>
<p>A noter que si vous souhaitez le rendre compatible avec d&#8217;autres systèmes équivalents (comme <a href="http://www.mindrot.org/projects/jBCrypt/">BCrypt pour Java</a> par exemple), alors il faudra vous assurer que votre machine a bien CRYPT_BLOWFISH d&#8217;installé (on peut le voir avec <code>&lt;?php echo CRYPT_BLOWFISH; ?&gt;</code>) afin d&#8217;avoir une bonne compatibilité des deux systèmes.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2011/08/08/stocker-un-mot-de-passe-en-php-grace-a-bcrypt-securite/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Function Scroll To [javascript]</title>
		<link>http://blog.kodono.info/wordpress/2011/07/29/function-scroll-to-javascript/</link>
		<comments>http://blog.kodono.info/wordpress/2011/07/29/function-scroll-to-javascript/#comments</comments>
		<pubDate>Fri, 29 Jul 2011 08:12:07 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau débutant]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=646</guid>
		<description><![CDATA[[niveau débutant] &#60;EDIT&#62;: A noter qu&#8217;il existe la fonction HTMLElement.scrollIntoView() qui fait la même chose et qui semble être compatible avec tous les navigateurs contrairement à ce qu&#8217;il se dit sur divers forums (j&#8217;ai testé sur les navigateurs récents en tout cas, mais j&#8217;ai aussi testé d&#8217;IE6 à IE9 et ça semble fonctionner).&#60;/EDIT&#62; Pour se [...]]]></description>
			<content:encoded><![CDATA[<p>[niveau débutant]</p>
<p><strong>&lt;EDIT&gt;</strong>: A noter qu&#8217;il existe la fonction <a href="https://developer.mozilla.org/en/DOM/element.scrollIntoView">HTMLElement.scrollIntoView()</a> qui fait la même chose et qui semble être compatible avec <a href="http://help.dottoro.com/ljovandh.php">tous les navigateurs</a> contrairement à ce qu&#8217;il se dit sur divers forums (j&#8217;ai testé sur les navigateurs récents en tout cas, mais j&#8217;ai aussi testé d&#8217;IE6 à IE9 et ça semble fonctionner).<strong>&lt;/EDIT&gt;</strong></p>
<p>Pour se déplacement dans votre page jusqu&#8217;à un élément, pas besoin de jQuery.scrollTo() car vous pouvez le faire en quelques lignes de code.</p>
<p>Pour cela, on va calculer la position (coordonnées) de notre élément où on souhaite se rendre; on utilise les propriétés <code>offsetLeft</code> et <code>offsetTop</code>. Il faudra aussi tenir compte de l&#8217;<code>offsetParent</code> pour avoir une position correcte.</p>
<div class="code script">
<pre class="js">
var elem = document.getElementById('footer_bg');
var left = 0;
var top = 0;
do {
  left += elem.offsetLeft;
  top  += elem.offsetTop;
} while (elem = elem.offsetParent);
// on a maintenant les coordonnées X=left et Y=top de notre élément
// on peut donc se déplacement dans le document grâce à window.scrollTo(X,Y)
window.scrollTo(left,top);</pre>
</div>
<p>Vous pouvez <a href="#nogo" onclick="var elem=document.getElementById('footer_bg'),left=0,top=0;do{left+=elem.offsetLeft;top+=elem.offsetTop;}while(elem=elem.offsetParent);window.scrollTo(left,top);">tester ce code</a>, ce qui devrait vous amener jusqu&#8217;en bas de cette page.</p>
<p>Vous pouvez trouver une version de cette fonction qui fait ~100 caractères sur <a href="https://gist.github.com/1114275">https://gist.github.com/1114275</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2011/07/29/function-scroll-to-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mini code Encoder/Decoder en Base64 pour Javascript [programmation]</title>
		<link>http://blog.kodono.info/wordpress/2011/07/27/midi-code-encoder-decoder-en-base64-pour-javascript-programmation/</link>
		<comments>http://blog.kodono.info/wordpress/2011/07/27/midi-code-encoder-decoder-en-base64-pour-javascript-programmation/#comments</comments>
		<pubDate>Wed, 27 Jul 2011 10:05:31 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau débutant]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=638</guid>
		<description><![CDATA[[niveau débutant] Il existe plusieurs scripts sur le Net pour encoder/decoder en Base64 avec Javascript, mais c&#8217;est sur http://140byt.es/ que j&#8217;ai trouvé les plus courts, car ils font moins de 140 caractères ! Cependant, je les ai modifié légèrement pour qu&#8217;ils fonctionnent avec IE7 (et plus vieux) : function decode_b64(d,b,c,u,r,q,x){b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";for(r=q=x='';c=d.charAt(x++);~c&#038;&#038;(u=q%4?u*64+c:c,q++%4)?r+=String.fromCharCode(255&#038;u>>(-2*q&#038;6)):0)c=b.indexOf(c);return r} function encode_b64(a,b,c,d,e,f){b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";c="=";for(d=f='';e&#038;=3,a.charAt(d++)&#124;&#124;(b='=',e);f+=b.charAt(63&#038;c>>++e*2))c=c]]></description>
			<content:encoded><![CDATA[<p>[niveau débutant]</p>
<p>Il existe plusieurs scripts sur le Net pour encoder/decoder en Base64 avec Javascript, mais c&#8217;est sur <a href="http://140byt.es/">http://140byt.es/</a> que j&#8217;ai trouvé les plus courts, car ils font moins de 140 caractères !<br />
Cependant, je les ai modifié légèrement pour qu&#8217;ils fonctionnent avec IE7 (et plus vieux) :</p>
<div class="code script">
<pre class="js">
function decode_b64(d,b,c,u,r,q,x){b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";for(r=q=x='';c=d.charAt(x++);~c&#038;&#038;(u=q%4?u*64+c:c,q++%4)?r+=String.fromCharCode(255&#038;u>>(-2*q&#038;6)):0)c=b.indexOf(c);return r}
function encode_b64(a,b,c,d,e,f){b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";c="=";for(d=f='';e&#038;=3,a.charAt(d++)||(b='=',e);f+=b.charAt(63&#038;c>>++e*2))c=c<<8|a.charCodeAt(d-=!e);return f}</pre>
</div>
<p>Soit un <strong>total de 436 bytes</strong> pour les deux fonctions.</p>
<p>Pour l'utiliser :</p>
<div class="code script">
<pre class="js">alert(decode_b64(encode_b64("foobar")));</pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2011/07/27/midi-code-encoder-decoder-en-base64-pour-javascript-programmation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Evénement sur la fermeture d&#8217;une fenêtre (window close) [javascript]</title>
		<link>http://blog.kodono.info/wordpress/2011/07/26/evenement-sur-la-fermeture-dune-fenetre-window-close-javascript/</link>
		<comments>http://blog.kodono.info/wordpress/2011/07/26/evenement-sur-la-fermeture-dune-fenetre-window-close-javascript/#comments</comments>
		<pubDate>Tue, 26 Jul 2011 13:14:59 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=634</guid>
		<description><![CDATA[[niveau: intermédiaire] Il est possible d&#8217;effectuer une action sur la page avant que l&#8217;utilisateur ne quitte la page (en la fermant, la rechargeant, en navigant dans l&#8217;historique, ou en cliquant sur un lien). Pour cela utilisez la méthode ci-dessous (via MDN) : window.onbeforeunload = function (e) { e = e &#124;&#124; window.event; // For IE [...]]]></description>
			<content:encoded><![CDATA[<p>[niveau: intermédiaire]</p>
<p>Il est possible d&#8217;effectuer une action sur la page avant que l&#8217;utilisateur ne quitte la page (en la fermant, la rechargeant, en navigant dans l&#8217;historique, ou en cliquant sur un lien). Pour cela utilisez la méthode ci-dessous (via <a href="https://developer.mozilla.org/En/DOM/Window.onbeforeunload">MDN</a>) :</p>
<div class="code script">
<pre class="js">window.onbeforeunload = function (e) {
  e = e || window.event;
  // For IE and Firefox prior to version 4
  if (e) e.returnValue = 'Any string';

  // For Safari
  return 'Any string';
};</pre>
</div>
<p>Si vous ne voulez pas ce comportement pour un clic sur un lien, alors il faudra gérer une variable qui sera activée lors d&#8217;un clic sur un tag A (exemple avec jQuery) :</p>
<div class="code script">
<pre class="js">
__okForClosing = false;
window.onbeforeunload = function (e) {
  if (!__okForClosing) {
    e = e || window.event;
    // For IE and Firefox prior to version 4
    if (e) e.returnValue = 'Any string';

    // For Safari
    return 'Any string';
  }
};
$('a').click(function() { __okForClosing=true; });</div>
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2011/07/26/evenement-sur-la-fermeture-dune-fenetre-window-close-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Simple effet highlight sur un element avec jQuery [javascript]</title>
		<link>http://blog.kodono.info/wordpress/2011/07/19/effet-highlight-un-element-avec-jquery-javascript/</link>
		<comments>http://blog.kodono.info/wordpress/2011/07/19/effet-highlight-un-element-avec-jquery-javascript/#comments</comments>
		<pubDate>Tue, 19 Jul 2011 15:48:59 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=612</guid>
		<description><![CDATA[[niveau: intermédiaire] Si vous souhaitez créer un effet highlight sur un élément (en passant le background en jaune par exemple), voici comment il faut s&#8217;y prendre : jQuery.prototype.highlight = function() { jQuery(this).css("background-color","yellow").fadeTo('slow', 0.1, function() { jQuery(this).fadeTo('slow', 1.0, function() { jQuery(this).css("background-color","white"); }); }); }; jQuery('#mon-element').highlight(); A tester ici : Hello, I&#8217;m an example Highlight Total 31337 [...]]]></description>
			<content:encoded><![CDATA[<p>[niveau: intermédiaire]</p>
<p>Si vous souhaitez créer un effet  highlight sur un élément (en passant le background en jaune par exemple), voici comment il faut s&#8217;y prendre :</p>
<div class="code script">
<pre class="js">
jQuery.prototype.highlight = function() {
  jQuery(this).css("background-color","yellow").fadeTo('slow', 0.1, function() {
    jQuery(this).fadeTo('slow', 1.0, function() {
      jQuery(this).css("background-color","white");
    });
  });
};

jQuery('#mon-element').highlight();
</pre>
</div>
<p><script>
jQuery.prototype.highlight = function() { 
  jQuery(this).css("background-color","yellow").fadeTo('slow', 0.1, function() {
    jQuery(this).fadeTo('slow', 1.0, function() {
      jQuery(this).css("background-color","white");
    });
  });
};
</script></p>
<div style="display:none">
A tester ici :</p>
<div>
<table border="1">
<tr>
<td colspan="2">Hello, I&#8217;m an example</td>
<td><a href="#nogo" onclick="jQuery(this).closest('tr').find('td').highlight()">Highlight</a></td>
</tr>
<tr>
<td>Total</td>
<td>31337</td>
<td><a href="#nogo" onclick="jQuery(this).closest('tr').find('td').highlight()">Highlight</a></td>
</tr>
</table>
<p>Ceci est pour le test. <a href="#nogo" onclick="jQuery(this).parent().highlight()">Highlight</a></p>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2011/07/19/effet-highlight-un-element-avec-jquery-javascript/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Mettre en majuscule la première lettre d&#8217;un mot/phrase [Javascript]</title>
		<link>http://blog.kodono.info/wordpress/2011/06/24/mettre-en-majuscule-la-premiere-lettre-dun-motphrase-javascript/</link>
		<comments>http://blog.kodono.info/wordpress/2011/06/24/mettre-en-majuscule-la-premiere-lettre-dun-motphrase-javascript/#comments</comments>
		<pubDate>Fri, 24 Jun 2011 14:46:12 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau débutant]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=606</guid>
		<description><![CDATA[[niveau: débutant] Il suffit d&#8217;utiliser ce petit code pour transformer &#171;&#160;paris&#160;&#187; en &#171;&#160;Paris&#160;&#187; grâce à Javascript : "paris".replace(/^\w/, function($0) { return $0.toUpperCase(); })]]></description>
			<content:encoded><![CDATA[<p>[niveau: débutant]</p>
<p>Il suffit d&#8217;utiliser ce petit code pour transformer &laquo;&nbsp;paris&nbsp;&raquo; en &laquo;&nbsp;Paris&nbsp;&raquo; grâce à Javascript :</p>
<div class="code script">
<pre class="js">"paris".replace(/^\w/, function($0) { return $0.toUpperCase(); })</pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2011/06/24/mettre-en-majuscule-la-premiere-lettre-dun-motphrase-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Limite de caractères dans un mailto/href sous IE [internet explorer limit]</title>
		<link>http://blog.kodono.info/wordpress/2011/06/15/limite-de-caracteres-dans-un-mailtohref-sous-ie-internet-explorer-limit/</link>
		<comments>http://blog.kodono.info/wordpress/2011/06/15/limite-de-caracteres-dans-un-mailtohref-sous-ie-internet-explorer-limit/#comments</comments>
		<pubDate>Wed, 15 Jun 2011 08:59:33 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Navigateur]]></category>
		<category><![CDATA[Niveau débutant]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[Astuce]]></category>
		<category><![CDATA[internet explorer]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=598</guid>
		<description><![CDATA[[niveau débutant] Je me suis retrouvé dans la situation où dans un mailto je devais inscrire plusieurs informations (subject, cc, body) afin de créer une sorte de template qui s&#8217;ouvrirait avec Outlook. Je l&#8217;avais incorporé dans un href d&#8217;un lien classique. Si le lien fonctionnait parfaitement sous Firefox, il apparait que sous Internet Explorer j&#8217;avais [...]]]></description>
			<content:encoded><![CDATA[<p>[niveau débutant]</p>
<p>Je me suis retrouvé dans la situation où dans un mailto je devais inscrire plusieurs informations (subject, cc, body) afin de créer une sorte de template qui s&#8217;ouvrirait avec Outlook. Je l&#8217;avais incorporé dans un <em>href</em> d&#8217;un lien classique. Si le lien fonctionnait parfaitement sous Firefox, il apparait que sous Internet Explorer j&#8217;avais droit à une page blanche (<em>about:blank</em>)&#8230; <a href="http://havingfunyet.wordpress.com/2010/09/30/long-mailto-link-does-not-work-in-ie-8/">Après quelques recherches</a>, j&#8217;ai découvert qu&#8217;IE en &laquo;&nbsp;Protected Mode: Off&nbsp;&raquo; se limite à 508 caractères pour le mailto&#8230;. allez savoir d&#8217;où vient cette limite ?!</p>
<p>Pour outrepasser ce problème, vous avez deux solutions :<br />
1) Demander à vos utilisateurs de passer en &laquo;&nbsp;Protected Mode: On&nbsp;&raquo; (non envisageable)<br />
<strong>2) Utiliser Javascript en associant un <em>window.location.href</em> à votre ligne <em>mailto:email?subject=xxx&#038;cc=xxx&#038;body=xxxx</em>, qui fonctionnera pour tout le monde !</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2011/06/15/limite-de-caracteres-dans-un-mailtohref-sous-ie-internet-explorer-limit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ajout/Suppression/Modification d&#8217;un SELECT dans IE6 qui ne se rafraîchit pas [IE6 Exception]</title>
		<link>http://blog.kodono.info/wordpress/2011/03/10/ajoutsuppressionmodification_select_ie6/</link>
		<comments>http://blog.kodono.info/wordpress/2011/03/10/ajoutsuppressionmodification_select_ie6/#comments</comments>
		<pubDate>Thu, 10 Mar 2011 17:10:30 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Navigateur]]></category>
		<category><![CDATA[Niveau débutant]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[IE6]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[rendu]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=548</guid>
		<description><![CDATA[[niveau: débutant] J&#8217;ai remarqué la chose suivante : j&#8217;utilise jQuery pour ajouter/supprimer des éléments dans une liste déroulante SELECT, cependant sous IE6 le rendu de la liste n&#8217;est pas mis à jour, et de fait les modifications apparaissent de façon partielle. Pour résoudre ce problème j&#8217;ai découvert qu&#8217;il faut ajouter un élément FRAME sur la [...]]]></description>
			<content:encoded><![CDATA[<p>[niveau: débutant]</p>
<p>J&#8217;ai remarqué la chose suivante : j&#8217;utilise jQuery pour ajouter/supprimer des éléments dans une liste déroulante SELECT, cependant sous IE6 le rendu de la liste n&#8217;est pas mis à jour, et de fait les modifications apparaissent de façon partielle. Pour résoudre ce problème j&#8217;ai découvert qu&#8217;il faut ajouter un élément FRAME sur la page pour que le rendu soit mis à jour ! Si on utilise jQuery, cela ne fonctionne pas, il faut donc utiliser la bonne vieille méthode :</p>
<div class="code">
<pre class="JavaScript script">if (jQuery.browser.msie &amp;&amp; parseInt(jQuery.browser.version, 10) == 6) {
      var f=document.createElement('frame');
      f.display="none";
      document.body.appendChild(f);
 }</pre>
</div>
<p>Ainsi après ma modification, j&#8217;ajoute une FRAME invisible qui va forcer IE6 à rafraîchir le rendu de la page et ainsi à mettre à jour la dropdown box.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2011/03/10/ajoutsuppressionmodification_select_ie6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hack de la BBox pour Android [Astuce]</title>
		<link>http://blog.kodono.info/wordpress/2011/02/24/hack-de-la-bbox-pour-android-astuce/</link>
		<comments>http://blog.kodono.info/wordpress/2011/02/24/hack-de-la-bbox-pour-android-astuce/#comments</comments>
		<pubDate>Thu, 24 Feb 2011 06:10:34 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[Astuce]]></category>
		<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[Sécurité]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[wifi]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=535</guid>
		<description><![CDATA[[niveau intermédiaire] EDIT: une application Android existe maintenant pour BBox (et autres box) : Penetrate. La nouvelle a rapidement fait le tour du web : le mot de pass wifi par défaut de la BBox de Bouygues Telecom se retrouve très facilement à partir du nom du réseau (appelé SSID). Ainsi on trouve un script [...]]]></description>
			<content:encoded><![CDATA[<p>[niveau intermédiaire]</p>
<p><strong>EDIT:</strong> une application Android existe maintenant pour BBox (et autres box) : <a href="https://market.android.com/details?id=org.underdev.penetrate&#038;feature=search_result">Penetrate</a>.</p>
<p>La nouvelle a rapidement fait le <a href="http://www.papygeek.com/hacking/pirater-le-wifi-dune-bbox-en-30-secondes/">tour du web</a> : le mot de pass wifi par défaut de la BBox de Bouygues Telecom se retrouve très facilement à partir du nom du réseau (appelé SSID). Ainsi on trouve un script pour Windows, et un autre pour Linux.<br />
J&#8217;ai décidé de transcrire ce script pour Android grâce au projet <a href="https://code.google.com/p/android-scripting/">Android Scripting</a>.</p>
<p><strong>Comment cela fonctionne ?</strong></p>
<p>Il suffit d&#8217;installer l&#8217;<a href="https://code.google.com/p/android-scripting/downloads/list">application SL4A</a>. Ouvrez l&#8217;application, puis &laquo;&nbsp;Menu&nbsp;&raquo; et &laquo;&nbsp;View&nbsp;&raquo;. Choisissez &laquo;&nbsp;Interpreters&nbsp;&raquo;, puis &laquo;&nbsp;Menu&nbsp;&raquo; et &laquo;&nbsp;Add&nbsp;&raquo;. Prenez &laquo;&nbsp;Python&nbsp;&raquo; dans la liste proposée. Cela va télécharger l&#8217;interpréteur Python que vous devrez installer, puis ouvrir, et enfin suivre les instructions.</p>
<p>Ensuite il vous faut récupérer le script python : <a href="http://blog.kodono.info/wordpress/wp-content/uploads/hack_bbox_Android.py">hack_bbox_Android.py</a></p>
<p>Maintenant connectez votre téléphone à l&#8217;ordinateur, activez le périphérique de stockage USB, et allez dans dans le répertoire &laquo;&nbsp;sl4a&nbsp;&raquo; qui doit se trouver à la racine, puis placez le script dans&#8230; &laquo;&nbsp;scripts&nbsp;&raquo; <img src='http://blog.kodono.info/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Déconnectez votre téléphone de l&#8217;USB, et lancez SL4A, et enfin le script nommé &laquo;&nbsp;Hack_BBox_android.py&nbsp;&raquo;.</p>
<p>Votre téléphone (ou votre tablette) va vous montrer les réseaux Wifi disponibles autour de vous (pensez à activer le wifi avant!). Il suffit d&#8217;en choisir un qui commence par BBox pour que le script se mette à chercher la clé correspondante. Selon la puissance de votre téléphone, l&#8217;opération peut prendre jusqu&#8217;à 15 min (temps constaté sur un HTC Hero, alors qu&#8217;il faut que 2 min sur une tabelette Toshiba Folio 100).</p>
<p>Captures d&#8217;écran :<br />
<a href="http://blog.kodono.info/wordpress/wp-content/uploads/2011/02/snap20110224_093349.png"><img src="http://blog.kodono.info/wordpress/wp-content/uploads/2011/02/snap20110224_093349-200x300.png" alt="" title="Choisir le wifi" width="200" height="300" class="aligncenter size-medium wp-image-537" /></a><br />
<a href="http://blog.kodono.info/wordpress/wp-content/uploads/2011/02/snap20110224_094722.png"><img src="http://blog.kodono.info/wordpress/wp-content/uploads/2011/02/snap20110224_094722-200x300.png" alt="" title="Le process commence" width="200" height="300" class="aligncenter size-medium wp-image-538" /></a><br />
<a href="http://blog.kodono.info/wordpress/wp-content/uploads/2011/02/snap20110224_095841.png"><img src="http://blog.kodono.info/wordpress/wp-content/uploads/2011/02/snap20110224_095841-200x300.png" alt="" title="Résultat" width="200" height="300" class="aligncenter size-medium wp-image-539" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2011/02/24/hack-de-la-bbox-pour-android-astuce/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery.ready() avant le chargement des images [Javascript]</title>
		<link>http://blog.kodono.info/wordpress/2010/11/19/jquery-ready-avant-le-chargement-des-images-javascript/</link>
		<comments>http://blog.kodono.info/wordpress/2010/11/19/jquery-ready-avant-le-chargement-des-images-javascript/#comments</comments>
		<pubDate>Fri, 19 Nov 2010 17:01:41 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[Navigateur]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[internet explorer]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[Niveau débutant]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=511</guid>
		<description><![CDATA[[niveau: intermédiaire] Pour ma société je dois travailler sur IE7. Il se trouve que j&#8217;utilise jQuery (1.4.4) avec Microsoft Sharepoint pour customizer certaines pages. J&#8217;ai remarqué que sous mon IE7 la fonction jQuery(document).ready() n&#8217;était appelée que lorsque les images étaient complètement chargées; cependant ce comportement ralentissait grandement les modifications que je cherchais à faire. Après [...]]]></description>
			<content:encoded><![CDATA[<p>[niveau: intermédiaire]</p>
<p>Pour ma société je dois travailler sur IE7. Il se trouve que j&#8217;utilise jQuery (1.4.4) avec Microsoft Sharepoint pour customizer certaines pages. J&#8217;ai remarqué que sous mon IE7 la fonction <code>jQuery(document).ready()</code> n&#8217;était appelée que lorsque les images étaient complètement chargées; cependant ce comportement ralentissait grandement les modifications que je cherchais à faire.</p>
<p>Après quelques recherches j&#8217;ai découvert une solution qui fonctionne pour moi sur le <a href="https://nexxar.wordpress.com/2010/10/07/speeding-up-jquery-ready-on-ie/">blog de Nexxar</a> : il suffit d&#8217;ajouter <code>try { jQuery.ready(); } catch {}</code> à la fin de la page HTML pour que notre fonction <em>ready</em> soit activée avant que toutes les images ne soient pleinement téléchargées !</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2010/11/19/jquery-ready-avant-le-chargement-des-images-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Retour à la ligne pour une commande shell [linux]</title>
		<link>http://blog.kodono.info/wordpress/2010/09/17/retour-a-la-ligne-pour-une-commande-shell-linux/</link>
		<comments>http://blog.kodono.info/wordpress/2010/09/17/retour-a-la-ligne-pour-une-commande-shell-linux/#comments</comments>
		<pubDate>Fri, 17 Sep 2010 16:20:49 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=490</guid>
		<description><![CDATA[[niveau intermédiaire] Difficile de trouver un titre correspondant à la problématique. Il se trouve que lorsque vous tapez la commande suivante dans un shell, vous obtenez le résultat ci-dessous: debian:~/tmp# ls test1.txt test deux.txt test_trois.txt debian:~/tmp# for i in $(find . -name &#171;&#160;*.txt&#160;&#187;); do echo $i; done ./test1.txt ./test_trois.txt ./test deux.txt Comme on peut le [...]]]></description>
			<content:encoded><![CDATA[<p>[niveau intermédiaire]</p>
<p>Difficile de trouver un titre correspondant à la problématique.<br />
Il se trouve que lorsque vous tapez la commande suivante dans un shell, vous obtenez le résultat ci-dessous:</p>
<div class="code">debian:~/tmp# ls<br />
test1.txt  test deux.txt  test_trois.txt<br />
debian:~/tmp# for i in $(find . -name &laquo;&nbsp;*.txt&nbsp;&raquo;); do echo $i; done<br />
./test1.txt<br />
./test_trois.txt<br />
./test<br />
deux.txt
</div>
<p>Comme on peut le constater, &laquo;&nbsp;test deux.txt&nbsp;&raquo; ayant un espace dans son nom, il est affiché sur deux lignes dans notre résultat au lieu d&#8217;une seule ligne.</p>
<p>Pour fixer ce problème, il suffit de modifier la <a href="http://tldp.org/LDP/abs/html/internalvariables.html#IFS">variable IFS</a> qui détermine le séparateur, puisque par défaut le séparateur va être un espace.<br />
Pour se faire nous devons mettre notre commande dans un script :</p>
<div class="code">#!/bin/bash<br />
# on demande à ce que le séparateur soit sur le retour à la ligne<br />
IFS=&#8217;<br />
&#8216;<br />
for i in $(find . -name &laquo;&nbsp;*.txt&nbsp;&raquo;); do<br />
  echo $i;<br />
done</div class="code">
<p>Le résultat de l&#8217;exécution de notre script :</p>
<div class="code">debian:~/tmp# ./script.sh<br />
./test1.txt<br />
./test_trois.txt<br />
./test deux.txt</div>
<p>Plus d&#8217;informations sur <a href="http://tldp.org/LDP/abs/html/internalvariables.html#IFS">http://tldp.org/LDP/abs/html/internalvariables.html#IFS</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2010/09/17/retour-a-la-ligne-pour-une-commande-shell-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Utiliser la première occurrence dans une regexp [Javascript]</title>
		<link>http://blog.kodono.info/wordpress/2010/08/02/premiere-occurrence-regexp/</link>
		<comments>http://blog.kodono.info/wordpress/2010/08/02/premiere-occurrence-regexp/#comments</comments>
		<pubDate>Mon, 02 Aug 2010 10:04:51 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[développement]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[regexp]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=458</guid>
		<description><![CDATA[[niveau: intermédiaire] Lorsque vous utilisez une expression régulière, cela va vous retourner un maximum de caractères, ainsi si nous prenons la chaine &#171;&#160;foo:bar:gniii&#160;&#187; avec la regexp /^(.*):(.*)$/, on va avoir &#171;&#160;foo:bar&#160;&#187; d&#8217;une part et &#171;&#160;gniii&#160;&#187; d&#8217;autre part. Alors comment faire pour obtenir la première occurrence de &#171;&#160;:&#160;&#187; dans notre chaine ? Il suffit d&#8217;ajouter le [...]]]></description>
			<content:encoded><![CDATA[<p>[niveau: intermédiaire]</p>
<p>Lorsque vous utilisez une expression régulière, cela va vous retourner un maximum de caractères, ainsi si nous prenons la chaine &laquo;&nbsp;foo:bar:gniii&nbsp;&raquo; avec la regexp <i>/^(.*):(.*)$/</i>, on va avoir &laquo;&nbsp;foo:bar&nbsp;&raquo; d&#8217;une part et &laquo;&nbsp;gniii&nbsp;&raquo; d&#8217;autre part.<br />
Alors comment faire pour obtenir la première occurrence de &laquo;&nbsp;:&nbsp;&raquo; dans notre chaine ? Il suffit d&#8217;ajouter le caractère clé &laquo;&nbsp;?&nbsp;&raquo;.<br />
Ainsi dans notre exemple il faut écrire : <i>/^(.*<b>?</b>):(.*)$/</i>, qui retournera &laquo;&nbsp;foo&nbsp;&raquo; et &laquo;&nbsp;bar:gniii&nbsp;&raquo;.</p>
<p>A noter que cela est valable pour la fonction &laquo;&nbsp;match&nbsp;&raquo; de Javascript, mais aussi pour les autres langages comme PHP.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2010/08/02/premiere-occurrence-regexp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Encoder les caractères spéciaux d&#8217;une URL en Java (comme Javascript.escape()) [Programmation]</title>
		<link>http://blog.kodono.info/wordpress/2010/03/26/encoder-les-caracteres-speciaux-dune-url-en-java-comme-javascript-escape-programmation/</link>
		<comments>http://blog.kodono.info/wordpress/2010/03/26/encoder-les-caracteres-speciaux-dune-url-en-java-comme-javascript-escape-programmation/#comments</comments>
		<pubDate>Fri, 26 Mar 2010 22:38:05 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau intermédiaire]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=429</guid>
		<description><![CDATA[[niveau intermédiaire] Il est possible de reproduire la fonction escape() de Javascript pour le langage Java. Cela permet par exemple de transformer &#171;&#160;François&#160;&#187; en &#171;&#160;Fran%E7ois&#160;&#187; ou encore &#171;&#160;Maël&#160;&#187; en &#171;&#160;Ma%EBl&#160;&#187;. public String myEncodeURI(String str) { StringBuffer ostr = new StringBuffer(); for(int i=0; i&#60;str.length(); i++) { char ch = str.charAt(i); if ((ch &#62;= 0x0020) &#038;&#038; (ch [...]]]></description>
			<content:encoded><![CDATA[<p>[niveau intermédiaire]</p>
<p>Il est possible de reproduire la fonction <em>escape()</em> de Javascript pour le langage Java. Cela permet par exemple de transformer &laquo;&nbsp;François&nbsp;&raquo; en &laquo;&nbsp;Fran%E7ois&nbsp;&raquo; ou encore &laquo;&nbsp;Maël&nbsp;&raquo; en &laquo;&nbsp;Ma%EBl&nbsp;&raquo;.</p>
<div class="code script">
<pre class="js">
public String myEncodeURI(String str) {
  StringBuffer ostr = new StringBuffer();
    for(int i=0; i&lt;str.length(); i++) {
      char ch = str.charAt(i);
      if ((ch &gt;= 0x0020) &#038;&#038; (ch &lt;= 0x007e))
        ostr.append(ch); // Pas besoin de convertir
      else {
        // conversion en HEX
        String hex = Integer.toHexString(str.charAt(i) &#038; 0xFFFF);
        ostr.append("%"+hex.toUpperCase());
      }
    }
    return (new String(ostr));
}
</pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2010/03/26/encoder-les-caracteres-speciaux-dune-url-en-java-comme-javascript-escape-programmation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Connaître la version d&#8217;Internet Explorer [Javascript]</title>
		<link>http://blog.kodono.info/wordpress/2009/11/05/connaitre-la-version-dinternet-explorer-javascript/</link>
		<comments>http://blog.kodono.info/wordpress/2009/11/05/connaitre-la-version-dinternet-explorer-javascript/#comments</comments>
		<pubDate>Thu, 05 Nov 2009 06:33:33 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Navigateur]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[Niveau intermédiaire]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=378</guid>
		<description><![CDATA[(niveau intermédiaire) Il est possible de connaître la version d&#8217;Internet Explorer en Javascript en utilisant le User Agent. Cependant, IE8, lorsqu&#8217;il est en mode compatibilité, va retourner IE7 quand on l&#8217;interroge. Cela peut poser problème. Il existe une solution qui permet de détecter IE8 même dans ce mode spécial, et sans utiliser les commentaires conditionnels [...]]]></description>
			<content:encoded><![CDATA[<p>(niveau intermédiaire)</p>
<p>Il est possible de connaître la version d&#8217;Internet Explorer en Javascript en utilisant le User Agent. Cependant, IE8, lorsqu&#8217;il est en mode compatibilité, va retourner IE7 quand on l&#8217;interroge. Cela peut poser problème. Il existe une solution qui permet de détecter IE8 même dans ce mode spécial, et sans utiliser les <a href="http://www.alsacreations.com/astuce/lire/48-commentaires-conditionnels.html">commentaires conditionnels</a> :</p>
<div class="code script">
<pre class="js">
// retourne un entier (5, 6, 7 ou 8), ou false si ce n'est pas IE
function getIEVersion() {
  if (!!(window.attachEvent &#038;&#038; navigator.userAgent.indexOf('Opera') === -1)) {
    var ver = navigator.userAgent.match(/MSIE ([0-9.]+);/);
    if (ver != null &#038;&#038; ver[1] != undefined) {
      ver = parseInt(ver[1]);
      if (ver == 7) {
        if (typeof (window.external.AddToFavoritesBar) != "undefined" ||
            typeof (window.external.AddService) != "undefined" ||
            typeof (window.external.AddService) != "undefined") return 8;
      }
      return ver;
    }
  }
  return false;
}</pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2009/11/05/connaitre-la-version-dinternet-explorer-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Simuler un click sur un bouton ou un lien [Programmation]</title>
		<link>http://blog.kodono.info/wordpress/2009/09/04/simuler-un-click-sur-un-bouton-ou-un-lien-programmation/</link>
		<comments>http://blog.kodono.info/wordpress/2009/09/04/simuler-un-click-sur-un-bouton-ou-un-lien-programmation/#comments</comments>
		<pubDate>Fri, 04 Sep 2009 17:51:05 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[Niveau débutant]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=312</guid>
		<description><![CDATA[[niveau débutant] En Javascript on peut facilement simuler un clic sur un élément d&#8217;une page HTML. Pour cela on utilisera la fonction suivante : function fireEventClick(elem){ if(document.createEvent){ var e = document.createEvent('MouseEvents'); e.initMouseEvent('click', /* Event type */ true, /* Can bubble */ true, /* Cancelable */ document.defaultView, /* View */ 1, /* Mouse clicks */ 0, [...]]]></description>
			<content:encoded><![CDATA[<p>[niveau débutant]</p>
<p>En Javascript on peut facilement simuler un clic sur un élément d&#8217;une page HTML. Pour cela on utilisera la fonction suivante :</p>
<div class="code script">
<pre class="js">
function fireEventClick(elem){
    if(document.createEvent){
      var e = document.createEvent('MouseEvents');
      e.initMouseEvent('click', /* Event type */
      true, /* Can bubble */
      true, /* Cancelable */
      document.defaultView, /* View */
      1, /* Mouse clicks */
      0, /* Screen x */
      0, /* Screen y */
      0, /* Client x */
      0, /* Client y */
      false, /* Ctrl */
      false, /* Alt */
      false, /* Shift */
      false, /* Meta */
      0, /* Button */
      null); /* Related target */
      elem.dispatchEvent(e);
    } else { // pour IE
      elem.click();
    }
}
</pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2009/09/04/simuler-un-click-sur-un-bouton-ou-un-lien-programmation/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Indenter un fichier XML [A bookmarker]</title>
		<link>http://blog.kodono.info/wordpress/2009/08/04/indenter-un-fichier-xml-a-bookmarker/</link>
		<comments>http://blog.kodono.info/wordpress/2009/08/04/indenter-un-fichier-xml-a-bookmarker/#comments</comments>
		<pubDate>Tue, 04 Aug 2009 16:49:55 +0000</pubDate>
		<dc:creator>Aymeric</dc:creator>
				<category><![CDATA[À bookmarker]]></category>
		<category><![CDATA[Astuce]]></category>
		<category><![CDATA[Niveau débutant]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[indenter]]></category>
		<category><![CDATA[web service]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://blog.kodono.info/wordpress/?p=286</guid>
		<description><![CDATA[[niveau: débutant] Grâce au site Aysoon j&#8217;ai découvert http://xmlindent.com/. Ce service gratuit propose de copier/coller du code de type XML qui va alors vous être présenté correctement indenté. Mise à jour: dans les commentaires, Lio propose aussi http://www.indentation-xml.com/ qui, apparemment, supporte mieux les caractères accentués.]]></description>
			<content:encoded><![CDATA[<p>[niveau: débutant]</p>
<p>Grâce au site <a href="http://blog.aysoon.com/">Aysoon</a> j&#8217;ai découvert <a href="http://xmlindent.com/">http://xmlindent.com/</a>. Ce service gratuit propose de copier/coller du code de type XML qui va alors vous être présenté correctement indenté.</p>
<p><strong>Mise à jour</strong>: dans les commentaires, Lio propose aussi <a href="http://www.indentation-xml.com/">http://www.indentation-xml.com/</a> qui, apparemment, supporte mieux les caractères accentués.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kodono.info/wordpress/2009/08/04/indenter-un-fichier-xml-a-bookmarker/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

