플래시 객체를 액티브 엑스로 바꾸기

IE는 object를 불러올 때 windows의 active-x를 사용하기 때문에 타 플랫폼과는 호환이 안되는 단점을 가지고 있다. Macromedia의 flash 무비 로드 방식으로 해결 할 수 있지만 이 방법 자체가 W3C에서 제안하는 object 사용방법은 아니다.

이 방법은 표준에 의거해서 object를 사용해 flash를 불러오고 표준을 정상적으로 처리 하지 않는 IE에서는 javascript를 이용해서 IE의 Active-x를 불러오는 방식을 적용하는 것이다.

function convertFlashToActiveX(objParent)
{
	// convert XHTML flash object to IE active-x control
	if(window.ActiveXObject) {
		flashObj = objParent.getElementsByTagName("object").item(0);

		movieUrl = flashObj.getAttribute("data");
		movieWidth = flashObj.getAttribute("width");
		movieHeight = flashObj.getAttribute("height");

		movieParam = "";	// IE cannot load param element by innerHTML
		alert(movieParam);
		paramEl = flashObj.getElementsByTagName("param");
		for (i=0; i<paramEl.length; i++) {
			movieParam += "<param name=\"" + paramEl.item(i).getAttribute("name") + "\" value=\"" + paramEl.item(i).getAttribute("value") + "\" />\n";
		}

		// out put
		objParent.innerHTML = "<object classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\" codebase=\"http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0\" width=\"" + movieWidth + "\" height=\"" + movieHeight + "\">\n" + movieParam + "\n</object>\n";
	}
}
* html object.ie-active-x-bug {
	display: none;
}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Convert Flash plug-in to Active-x</title>
</head>
<body>
<div id="myFlash"> 
	<object type="application/x-shockwave-flash" data="myFlash.swf" width="900" height="189" class="ie-active-x-bug">
		<param name="movie" value="myFlash.swf" />
		<param name="allowScriptAccess" value="sameDomain" />
	</object>
</div>
<script type="text/javascript">
convertFlashToActiveX(document.getElementById("myFlash"));
</script>
</body>
</html>

object.ie-active-x-bug 는 IE가 object를 인식하지 못해서 화면에 깨진 이미지 같은 것이 나오는 것을 방지하기 위한 class 이다.