플래시 객체를 액티브 엑스로 바꾸기
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 이다.