Определение версии Silverlight

При определение версии Silverlight в Internet Explorer возникает проблема, т.к. есть всего лишь одна функция в ActiveX-объекте для этих целей — isVersionSupported().

К счастью, есть решение, найденное на silverlightversion.com.

function getSilverlightVersion() {
	var version = null;        
	if (window.ActiveXObject) {
		try {
			var control = new ActiveXObject('AgControl.AgControl');
			
			function loopMatch(control, vers, idx, inc) {
				while(isSupported(control, vers)) {
					vers[idx] += inc;
				}
				vers[idx] -= inc;
			}

			function isSupported(control, ver) {
				return control.isVersionSupported(ver.join('.'));
			}                    

			var vers = [1, 0, 0, 0];
			loopMatch(control, vers, 0, 1);
			loopMatch(control, vers, 1, 1);
			loopMatch(control, vers, 2, 10000);
			loopMatch(control, vers, 2, 1000);
			loopMatch(control, vers, 2, 100);
			loopMatch(control, vers, 2, 10);
			loopMatch(control, vers, 2, 1);
			loopMatch(control, vers, 3, 1);

			version = vers.join('.');
		} catch (e) {}
	}
	else {
		var plugin = navigator.plugins['Silverlight Plug-In'];
		if (plugin) {
			version = plugin.description;            
		}
	}
	
	return version;
}
© Селезнёв Д. Л. 2012
Электронная почта: info@webfilin.ru