가끔씩 링크를 클릭해서 뉴스 사이트 접속하면 배너광고가 도배되고, 마우스를 이동하다 보면 링크 위로 광고들이 나타나는 등 짜증나는 경우가 많습니다. 심지어는 브라우저 창크기를 마음대로 변경하기 까지…… 이건 뭐 언론사인지 성인사이트인지 분간을 할 수도 없고……

그래서 파이어폭스의 Adblock Plus를 사용해서 귀찮은 자바스크립트나 광고 사이트를 차단하고 사용하죠. 윈도우 다시 설치하거나 했을 때 일일이 찾아서 차단하기도 귀찮아서 목록으로 정리해 봅니다.

자바스크립트 차단 목록
||keywordsconnect.com^ – 문맥광고
||keywordlink.co.kr^ – 문맥광고
||semanticrep.com^ – 창 리사이즈

배너광고 차단 목록
||adcreative.naver.com^
||adget.co.kr^
||adimg.daumcdn.net^
||amsv2.daum.net^
||contextads.net^
||doubleclick.net^
||googlesyndication.com^
||nasmedia.co.kr^
||realclick.co.kr^
||xcdnplus.co.kr^

 

플래시와 자바스크립트 사이에 연동을 좀 편하게 하려고 만든 어플. 이전 프로젝트에서 자바스크립트 연동이 많아서, 이를 좀 쉽게 처리하기 위한 유틸이었는데, 이걸 다시 만들어 봤습니다.

자바스크립트에서 플래시로 데이터를 보낼 때는 다음 코드와 같이 플래시 객체에서 sendToFlash() 함수를 호출합니다.

var data = new Object();
data.message = "message from JavaScript";
flashObj.sendToFlash(data);

자바스크립트에서 보낸 데이터를 받기 위해서는 아래와 같이 이벤트를 등록해 줍니다.

JSAgent.addEvent(receiveFromJS);
function receiveFromJS(e:JSAgentEvent):void
{
    trace(e.data.message);
}

반대로, 플래시에서 자바스크립트로 데이터를 보내려면 JSAgent.sendToJS() 함수를 사용합니다.

var data = new Object();
data.message = "message from Flash";
JSAgent.sendToJS(data);

이렇게 보내진 데이터를 받기 위해서 자바스크립트에서는 receiveFromFlash() 함수가 정의되어 있어야 합니다.

function receiveFromFlash(data)
{
    alert(data.message);
}

ExternalInterface를 사용할 때는 호출되는 함수명을 사용자가 지정할 수 있고, 파라메터의 갯수를 유동적으로 처리할 수 있다는 부분이 장점일 수 있지만, 경우에 따라서는 단점이 될 수도 있습니다. 유동적인 파라메터를 …args와 같이 배열로 받아서, 다시 apply() 등의 함수와 엮어줘야 하죠.
그래서 플래시 쪽에서 받는 함수명은 sendToFlash, 플래시에서 호출하는 자바스크립트 함수명은 receiveFromFlash로 고정시켰으며, 또한 파라메터는 하나만 사용하는 대신 Object 객체의 속성에 전달할 데이터를 넣는 구조로 만들었습니다.
사실 사용성 면에서 EI를 개선한 부분은 별로 없습니다. 그냥 EI를 사용하는 편이 나을지도……

샘플 및 소스 다운로드: JSAgent_Samples

 
플래시 무비에서 해당 SWF 파일을 포함하는 HTML 문서의 URL을 구하려면, HTML 문서에서 설정을 해주어야 합니다. FlashVars 파라메터 또는 자바스크립트를 통해서 플래시 무비로 URL을 전달해 줘야 하죠. 그런데 플래시의 ExternalInterface API와 자바스크립트의 eval() 함수를 이용하면, 그럴 필요가 없습니다.
To retrieve the HTML document’s URL in which the SWF file is inserted, you have to modify the HTML document. Pass the URL to the SWF movie via an FlashVars parameter or a JavaScript function. But, the ExternalInterface API in Flash and eval() function in JavaScript provide you with a more simple solution.
SWFファイルが含まれているHTMLドキュメントのURLを得るためには、そのHTMLファイルに何か設定をしなければならない。FlashVarsパラメタとかJavaScriptを使ってフラッシュムービーにURLを伝達します。でも、フラッシュのExternalInterface APIと共にJavaScriptのeval()函数を使用すると、その必要はないんです。

1
2
3
4
5
6
7
8
9
10
11
var btn:Button;
for(var i:uint=1; i<=3; i++){
	btn = this["b" + i];
	btn.addEventListener(MouseEvent.CLICK, clickListener);
}
 
function clickListener(e:MouseEvent):void{
	btn = e.currentTarget as Button;
	var str:String = ExternalInterface.call("eval", btn.label);
	tf.text = str;
}

Related link: http://wooyaggo.tistory.com/163

 

HTML 페이지에 플래시 오브젝트를 삽입하기 위해 사용하는 자바스크립트 코드를 공개합니다. 이미 MS가 이올라스로 부터 라이센스를 획득해서 플래시 오브젝트의 활성화를 위해 외부 자바스크립트 파일을 만들 필요는 없지만, 보다 쉽게 플래시 무비를 HTML 문서에 입력하기 위해 만들었습니다.

플래시에 익숙하지 않은 많은 개발자들이 플래시의 태그를 제대로 입력하지 못해서 플래시 무비가 의도와 다르게 표시되는 문제들이 많았습니다. 그래서 플래시에 대해서 잘 알지 못하더라도, 자바스크립트 함수를 통해서 쉽게 플래시 무비를 삽입할 수 있도록 구성하였습니다.

Insert Flash Object
Insert Flash Object example

 
파이어폭스에서 투명 플래시를 사용할 경우, 레이어 뒤의 객체들을 사용할 수 없는 문제가 있어서, 자바스크립트로 된 트윈 효과를 구글해서 찾은 사이트 입니다. 어지간한 트윈 효과는 대부분 제공하는 듯 합니다.

모션 종료값을 나타내는 finish 프로퍼티 대신 setFinish() 메소드를 사용하는 것 외에는, 플래시에서 사용하는 트윈 클래스와 사용법은 거의 비슷하네요.

I encounted a problem in FireFox. Though I set the wmode property of an SWF movie to transparent in FireFox, I can not click on objects beneath the DIV layer that contains the SWF file. So I googled, and found this JavaScript Tween.

It is much the same with the Tween class in ActionScript except taht it uses setFinish() method rather than finish property to set the ending value of the target object property to be tweened.

ごめんなさい。このポストには日本語の翻訳を提供しません。

JavaScript Motion Tween

© 2011 Hangun's World - Blog Suffusion theme by Sayontan Sinha