IE9 en mode standard et Sharepoint… bug du bouton OK [Sharepoint]

[niveau expert]

Si vous passez IE9 en mode standard avec Sharepoint vous risquez d’avoir le bouton OK des formulaires qui ne fonctionne plus… Après avoir debuggué le bazar j’ai découvert qu’un des fichiers (« /_layouts/1033/form.js ») Javascript utilise document.frames() au lieu de document.frames[]. Si cela fonctionne sur les anciens navigateurs, ce n’est plus le cas pour IE9 en mode standard, du coup il retourne un « Function expected ».

Il y a deux fonctions incriminées RTE_GetEditorIFrame() et RTE_DD_GetMenuFrame(). Il suffit d’utiliser les commentaires conditionnels pour indiquer que lorsqu’on utilise IE9 alors on remplace ces deux fonctions par :

function RTE_GetEditorIFrame(strBaseElementID)
{
	var ifmEditor=null;
	var doc=document;
	if ((null !=doc.frames) && (doc.frames.length==0) && (doc.parentWindow.parent !=null))
	{
		doc=doc.parentWindow.parent.document;
	}
	if ((null !=doc.frames) && (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) && (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;
}

Ainsi document.frames est bien appelé comme un objet et non comme une fonction !

A noter cependant qu’il existe des tonnes de bugs avec IE9 et Sharepoint 2003/2007. Il est donc conseillé d’utiliser le mode de compatibilité en IE8 si vous ne voulez pas passer des heures à trouver l’origine des problèmes et à les corriger :

<meta http-equiv="X-UA-Compatible" content="IE=8"/>

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*