Bogue avec Fancybox et JW Player dans IE9

Je me suis confronté récemment à un problème vraiment étrange concernant l'affichage de vidéos avec JW Player et Fancybox dans IE version 9.Il s'agit, en réalité, plutôt d'un problème concernant l'utilisation de flash dans un iframe.

Mise en situation

Une galerie de vidéos utilisant Fancybox pour le cours HIS 1075 de la TÉLUQ. Chaque vidéo est une page externe affichée dans un iframe par Fancybox. Les pages vidéos utilisent JW Player pour créer, soit l'objet flash, soit la balise <video> HTML5.

Le problème

Lorsqu'on affiche plusieurs vidéos dans IE9, on voit que ça commence rapidement à être lent et à ne plus vouloir charger les vidéos/flash. En ouvrant la console, je me suis aperçu qu'il y avait plusieurs erreurs à la fermeture de Fancybox.

SCRIPT5009: « __flash__removeCallback » est indéfini

La solution

Voici donc ce qui a réglé mon problème. L'important se trouve dans la fonction beforeClose :

$("a.lienVideo").fancybox({
	'maxWidth'		: '720',
	'maxHeight'		: '540',
	'autoScale'		: false,
	'autoSize'		: true,
	'type'			: 'iframe',
	'beforeClose'		: function(){
		$('.fancybox-inner iframe').attr('src', $('.fancybox-inner iframe').attr('src'));
		$('.fancybox-inner').hide();
	}
});

L'explication est que lors de la fermeture de Fancybox, l'objet flash n'est pas réellement détruit dans IE9. Il faut recharger le contenu de l'iframe pour forcer la "destruction". En fait, je ne sais pas pourquoi ça marche et je m'en fou :)