Flash Activate

Flash의 활성화 이슈

웹 페이지에서 구성되는 기본적인 필수 요소는 아니지만 플래시는 그 미려한 모션과 다양한 액션등으로 많은 곳에서 사용 되고 있습니다.
2006년경 object를 HTML 에서 사용하는 방식에대해 미국의 Eolas사에서 MS에 소송을 걸게 되었고 판결이 나기까지 MS는 Object를 js를 이용해서 로드하게하는 패치를 진행하였습니다.
2008년 초에 MS는 소송에서 이기게 되었고 다시 <object>를 이용해 바로 Object를 로드할 수 있게 패치를 진행하였으나, 사용자의 업데이트율이 낮은관계로 아직까지 js로 Object를 로드해야 안전하게 사용자가 플래시를 사용할 수 있게 됩니다.

ngbFlashActivate()

플래시 구현시에 정의 할 수 있는 대부분의 요소들을 원하는것으로 정의가 가능 하기 위해 작업이 되었으며, 여러가지 상황에 대비해서 고려가 되었습니다. 현재 플래시CS3 에서 제공하는 플래시 구현 방식을 차용해서 script 방식과 script가 로드되지 않을때의 방식 모두를 지원하게 했습니다. 파라미터는 원하는대로 추가 할 수 있습니다.

JS Source
function ngbFlashActivate()
{
	var isIE  = (navigator.appVersion.toLowerCase().indexOf("msie") != -1) ? true : false;
	var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
	var fullParam = new String;

	this.clsid = "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"; //MS Object ClassID
	this.codebase = "https://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0"; //Flash Version
	this.pluginspage = "http://www.macromedia.com/go/getflashplayer"; //Flash Plugin Link

	this.flashURL = new String;
	this.width = new String;
	this.height = new String;
	this.objId = new String;
	this.objClass = new String;

	this.wmode = new String;
	this.quality = new String;
	this.bgcolor = new String;
	this.allowScriptAccess = new String;
	this.allowFullScreen = new String;
	this.accessibility = new String;
	this.parameter = function( property, value )
	{
		if(isIE && isWin) { fullParam += "<param name='"+ property +"' value='"+ value + "' />\n"; }
		else { fullParam += " " + property +"='" + value +"'"; }
		switch ( property )
		{
			case "wmode": this.wmode = value; break;
			case "quality": this.quality = value; break;
			case "bgcolor": this.bgcolor = value; break;
			case "allowScriptAccess": this.allowScriptAccess = value; break;
			case "allowFullScreen": this.allowScriptAccess = value; break;
			default:;
		}
	}

	this.init = function( strFlashUrl, n4Width, n4Height)
	{
		this.flashURL = strFlashUrl;
		this.width = n4Width;
		this.height = n4Height;
	}
	this.loadFlash = function( showId )
	{
		if(this.wmode == ""){ this.parameter("wmode", "window")};
		if(this.quality == "") { this.parameter("quality", "high")};
		if(this.bgcolor == "") { this.parameter("bgcolor", "#FFFFFF")};
		if(this.allowScriptAccess == "") { this.parameter("allowScriptAccess", "always")};
		if(this.allowFullScreen == "") { this.parameter("allowFullScreen", "false")};

		var resultHTML = new String;
		var genIDAttr = (this.objId!="") ? " id='" + this.objId + "'" : "";
		var genClassAttr = (this.objClass!="") ? " class='" + this.objClass + "'" : "";
		var widthSizeAttr = (this.width !=0) ? " width='"+ this.width +"'" : "";
		var heightSizeAttr = (this.height !=0) ? " height='"+ this.height +"'" : "";
		if(isIE && isWin)
		{
			resultHTML = "<object " + genIDAttr + genClassAttr + " classid='"+ this.clsid +"' codebase='"+ this.codebase +"' " + widthSizeAttr + heightSizeAttr + ">\n";
			resultHTML += "<param name='movie' value='"+ this.flashURL +"' />";
			resultHTML += fullParam ;
			resultHTML += this.accessibility;
			resultHTML += "</object>";
		}
		else
		{
			resultHTML = "<object  " + genIDAttr + genClassAttr + "  type='application/x-shockwave-flash' data='" + this.flashURL + "' " + widthSizeAttr + heightSizeAttr + fullParam + ">\n";
			resultHTML += this.accessibility;
			resultHTML += "</object>";
		}
		(showId) ? document.getElementById(showid).innerHTML = resultHTML : document.writeln ( resultHTML );
	}
}
사용법
<script type="text/javascript">
	var flash = new ngbFlashActivate();
	flash.init('http://s.nx.com/S2/Nexon2007/banner/banner_brand/main_promotion.swf','225','283','main_promotion');
	flash.accessibility = '<p><img src="" alt="대체컨텐츠" /></p>';
	flash.parameter('wmode','transparent');
	flash.parameter('flashVars','menu= 001');
	flash.loadFlash();
</script>

<noscript>
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="225" height="283" id="Untitled-2">
	<param name="allowScriptAccess" value="sameDomain" />
	<param name="allowFullScreen" value="false" />
	<param name="movie" value="http://s.nx.com/S2/Nexon2007/banner/banner_brand/main_promotion.swf" />
	<param name="quality" value="high" />
	<param name="bgcolor" value="#ffffff" />
	<param name="wmode" value="transparent" />
	<param name="flashVars" value="menu= 001" />

	<!--[if IE]>
	<object type="application/x-shockwave-flash" data="http://s.nx.com/S2/Nexon2007/banner/banner_brand/main_promotion.swf" quality="high" bgcolor="#ffffff" width="225" height="283" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" wmode="transparent" flashvars="menu=001">
		<p><img src="" alt="대체컨텐츠" /></p>
	</object>
	<![endif]-->
</object>

크게 스크립트 로드부분과 <noscript>에 의한 대체 컨텐츠 부분으로 구성이 되어 있습니다.
컨디셔널 코멘트를 사용하여 IE일때와 IE가 아닐때를 구분해서 IE용을 먼저 로드후 로드되지않을때 안의 컨텐츠를 로드하는 방식으로 구성되어 있습니다.

var flash = new ngbFlashActivate();
필수요소입니다. 플래시 오브젝트를 생성하고 특정 변수(flash)에 대입합니다. 특정 변수는 알아보기 쉽고 중복되지 않는 범위에서 자유롭게 결정합니다.

var 정의오브젝트명 = new ngbFlashActivate();
flash.init(‘http://s.nx.com/S2/Nexon2007/banner/banner_brand/main_promotion.swf’,’225′,’283′,’main_promotion’);
필수요소입니다. 플래시에서 기본적으로 필요한 요소들을 정의합니다.

정의오브젝트명.init('flash URL','가로사이즈','세로사이즈','플래시의 DOM ID');
flash.accessibility = ‘<p><img src=”” alt=”대체컨텐츠” /></p>’;
부가요소입니다. 플래시가 로드되지 않을 경우에 보여야 하는 컨텐츠를 구성하여 넣어 줍니다. 접근성 관련 콘텐츠입니다.

정의오브젝트명.accessibility = "대체 콘텐츠";
flash.parameter(‘wmode’,’transparent’);
부가요소입니다. 플래시에서 사용되는 각종 속성들(wmode, flashvars 등등) 정의 할 수 있습니다.
정의오브젝트명.parameter('속성', '속성값');
flash.loadFlash(); , flash.loadFlash(‘DOM ID’);
필수요소입니다. 각종 요소들과 정의된 옵션들을 조합해서 실제로 플래시 오브젝트를 표현해 줍니다.
loadFlash 함수안에 파라미터의 값이 있게 되면 파라미터의 값을 ID로 가진 앨리먼트 안으로 앨리먼트가 표현되게 됩니다.
함수안에 파라미터가 존재하지 않으면 오브젝트가 정의된 곳에 그대로 플래시오브젝트를 표현합니다.

각종 요소에 기본값이 세팅되어 있습니다.

  • wmode= “window”
  • quality= “high”
  • bgcolor = “#FFFFFF”
  • allowScriptAccess = “always”
  • allowFullScreen = “flase”

당연히 파라미터 지정을 새로이하면 값은 변경이 됩니다.

이걸 본 한사람의 반응
‘플래시를 스크립트로 구현한다는게 좀 구림 플래시오브젝트 여부를 판단해서 대체텍스트를 뿌려줄지 플래시 코드를 뿌려줄지 선택할수 있지 않을까?’
라고 했으나 더이상은 귀찮아서 작업하기 싫었어요;

다찌마와 리 – 악인이여 지옥행 급행열차를 타라!

제가 머 딱히 영화에 조예가 깊은것도 아니고 그냥 웬만한 영화는다 재미있게 즐겨보는편 입니다.
일단 멍석 깔아놓고, 대부분의 영화도 그렇지만 류승완 감독의 작품도 꽤나 좋아합니다. 아라한 장풍대작전이나 짝패같이 시원 시원한 액션이 있는 작품이나 (특히 아라한의 고기집 액션 이나 짝패의 비보이등과의 싸움 같은건 가히 최고라고..) 주먹이 운다 같은 절박함이 묻어나는 내용의 영화도 재미있죠. 또한 사이사이 묻어나오는 센스와 화려하고 세련된 액션이 항상 빛을 발하는것 같습니다.
이번에 다찌마와리는 티저 부터 시작해서 포스터 등장인물 등등 제 눈을 한눈에 뒤집었습니다.
다찌마와리 포스터
보통 B급 영화라고들 홍보가 된 것 같았는데, 일부러 허술하게 제작한 느낌을 주기 위해 노력하면서도 디테일이 무한으로 숨어 있었습니다. 뭐 억지로 세트를 꾸미지 않습니다. 21세기에 우리가 자주보던 그런곳들이 1940년대로 뒤바뀝니다. 그리고 뻔뻔하게 자막으로 처리하죠-_-; 영화를 보면서 이영화의 참맛을 모두 알려면 몇 번은 더봐야겠다는 느낌까지 들었을 정도니까요. 랩을 할때 매인 랩만큼 추임새의 비중이 높았다고나 할까요? 그만큼 볼거리가 많은 영화 였습니다. 또한 류승완 감독답게 특유의 화려한 액션도 놓치지 않았습니다.
화려한 액숀

아 최고의 그 센스있는 대사를 생각해내는 사람은 누굴까요. 아 대사자체도 너무웃깁니다.
정말 간간히 보여주는 액션은 화려하다 못해 아름다웠는데 역시 류승완, 정두홍이다 라는 말이 나올만하군요. 참 정두홍 감독은 네멋대로해라에서 알게되어 서울액션스쿨의 존재도 알게되고, 영화에 정두홍이 나올때마다, 우리의 복수가 옆에 있을것같아 정겹기만 합니다.
정두홍 감독은 이번에 일부러 비중을 낮게 잡은걸까요? ㅎㅎ

류승완 감독의 친동생이자 멋진 배우인 류승범의 좀 깝치는 연기도 이제는 물이 오를때로 올랐나봅니다. 역시 깝치는 연기는 품행제로 이후 뭐 평정했다고나 할까요?
승범아아~~~
보면서 어찌나 웃었는지 배가 땡겨서 기침을 못할 정도 였습니다. 아 리쌍이 찬조로 나오더군요. 길은 확실히 예능쪽에 뭔가있는지 개리보다 많은 비중을 보여줬습니다.
나를위해노래를불러줘~

주인공인 임원희는 이런 연기를 위해 타고난 듯한 느낌이 듭니다. 재밌는영화 보다는 이번이 더 재미있는것 같습니다.(사실 재밌는영화는좀 =_=;;;) 목소리는 임원희라는 배우에서 가장 큰 비중을 차지하지 않을까 생각합니다. 인터뷰도 있네요

볼거리가 너무 많아 컷이 빨리 진행되는게 아까운 영화 였습니다. 엔딩 크래딧에서 나오는 NG신도 사람들이 거의 앉아서 웃으면서 즐기더라구요. 사람들 반응을 보니 그냥 격식없이 즐거운 표정이었습니다. 맨날 뭔가 반전이있고 엄숙하며 뭔가 머리써서 생각하느라 정신없는 영화들도 있지만 이렇게 그냥 막웃다 나오는 영화도 좋은것 같습니다. 그냥 저는 요즘 본 영화중에 제일 재미있었어요.

강풀의 다찌마와리 소개 만화도 재미 있을것 같아요.

Firefox에서 게임을 실행할 수 있습니다.

제가 다니는 회사에서 한 1년6개월전인가요? 기존의 activeX에서만 실행이 되던 게임 웹 런칭(저희는 이렇게 부를껄요?)을 firefox도 될수있게 XUL을 이용해서 만들었었습니다. 제가 만든건 아니고 관련의 다른팀분께서… 저는 약간의 조언이나 도움만 주었죠;;
그런데 실제로 게임 웹 사이트가 firefox에서 실행되지 않는 문제가 있어서 사용할 수 없었는데요.. (무한 error alert의 반복….. documant.all 의 향연)

이번에 오픈한 사이트 는 완벽하진 않지만 로그인하고 게임을 실행하는데 큰 무리가 없습니다. 일단 작업 하신분들께 감사하다는 말씀을 드립니다. 아직까지 윈도우 기반의 IE, Firefox만 지원하지만 그래도 어디입니까~ 한발을 용기내어서 내딛었다는데 기분이 좋더라구요.(작업도 안한 주제에;)
나머지 게임 웹 사이트들도 어서 크로스 브라우징이 되게 수정하여 빛을 발했으면 하는 느낌입니다.

음 같은 방법으로 오페라도 만들고 차츰 이렇게 게임 실행이되는 범위를 늘리면 좋겠다 하는 생각이 드는 반면, 한계가 있을텐데라는 생각이 들기도 합니다. 또한 firefox용 ActiveX 를 만들어 버린건 아닌가 라는 생각이 들기도 하더라구요…
그래서 온라인 게임 실행에 대한 생각을 좀 해봤습니다.

게임 웹 런칭을 지원을 하되 웹 런칭이 불가능한 사람들을 위해서 로그인 세션이 걸려있지않은 경우에는 게임 실행후 로그인을 할 수 있게끔 지원을 하는거에요.. 뭐 경로가 여러군데고 그러면 보안상이나 이런저런 문제가 있겠지만 이렇게 작업하는것이 기본적인 느낌이라 생각이 들거든요. “기본적인것을 구현하고 부가적인것 덧붙인다.” 라는 말처럼 말이죠.

은행도 기본 HTTPS, SSL로 작업한뒤에 원하는 사람에 한에서만 부가적인 ActiveX같은 컨트롤을 이용하게 하면 좋을텐데 말이죠. 넥슨에서 사용하는 키보드 보안처럼 원하는사람만 사용할수있게….

한 CSS 파일안의 Selector 허용 갯수

음 말이 좀 이상한데; 예전에 어느 블로그에서 본적이 있었습니다만. 그 블로그가 없어 졌는지 다시는 못찾겠네요.
IE6, IE7에서 CSS 파일 하나의 selector 개체가 4096번째까지만 인식을 한다는 내용입니다.
4096번째가 넘어가면 없는 파일로 치더라구요.. 테스트 파일 을 만들어 봤습니다. 혹 동일한 selector만 사용해서 그런가 해서 다른 것도 해봤는데 마찬가지이군요…
ie를 꼭 맞춰야하는 우리나라에서는 한번쯤 염두해 둬야 할 내용인지도 모르겠습니다.

뭐 이런 내용도 있습니다.. 여기에도 잠깐 언급이 되어있군요….
Internet Explorer CSS File Size Limit

요즘 간간히 보이는 고화질 Flash 동영상

요즘 제가 빠삐코에 빠져 있어서……… 이게 아니고 “자주가는 블로그들 중에는 “:http://leegy.egloos.com/4514863 들어가자마자 동영상과 큰음악이 뜨는 경우가 있더라구요.
(저 블로그들 말고도 많이 봤습니다만; 대표적으로 유명한 블로그 이기 때문에…… 그냥 언급해봤어요.)

뭐 불만 있으면 안가면 되자나 라고 하실분들이 분명히 계시겠지만.. 다들 글을 어찌나 잘 쓰시는지 볼것도 많고 재미 있기도 하고 그래서 즐겨보는 블로그들이 있습니다.

근데 간간히 페이지를 열면 시끄러운 음악과 함께 동영상이 플레이 되는 경우가 있더라구요.. 저는 깜짝 놀라서 가슴이 철렁했습니다.ㅎㅎ 제가 새가슴이에요;

적어도 자동 재생을 할수있다고 쳐도 도중에 영상을 멈추는 기능이나.. 음량을 조절하는 기능정도는 최소한으로 지원해줘야 하는게 아닐까 합니다.
뭐 세가지다 지원해주면 더 좋겠죠 뭐..

뭐 요즘 유행인것 같은데 조금 더 웹을 아름답게 하기 위해 그페이지를 읽는 다양한 사람들의 입장을 좀 고려해 주셨으면 좋겠어요.

결론은 빠삐코

닥치고 웹 표준