본문 바로가기

ActionScript/Tip

티스토리 블로그와 플래시. 그리고 externalInterface 오류.



내가만든 플래시 가져가지마

티스토리 블로그는 n모 블로그와 달리 swf파일을 삽입하기 쉽다.

원한다면 사이드바에 자신이 만든 swf를 위젯처럼 등록하는것도 꽤 쉽다.

문제는 이렇게 내가 만든 플래시파일들을 블로그에 넣었을때
플래시가 클라이언트에서 실행되는 특성상 누군가 마음대로 가져갈수도 있다.

글과 말로만 퍼가지 마세요 라고 해봤짜 통할 우리나라 네티즌이 아니기에 생각해낸 것이 
간단한 제약이다.

swf의 url 알아내기

처음에 생각한것은 swf파일이 실행되는 위치를 알아내어 원하는 위치에서만 재생되게 하는 방법이였다.

플래시만으로는 swf를 보여주고 있는 도메인의 url 을 알아낼 수 없으므로 자바스크립트를 이용해야 한다.
(loaderInfo객체의 url속성은 해당파일의 위치를 알아낼수있을 뿐)

원하는 결과를 얻기위해서는 플래시에서

 ExternalInterface.call("window.location.href.toString);  혹은
ExernalInterface.call("eval","document.URL");

등으로 반환값을 받아내어 해당 문자열을 처리하면 swf가 실행되고 있는 url주소를 알아낼수있다.

그렇게 모든것이 해결될 줄 알았다...

언제나 문제는 익스플로어 

결과부터 말하자면 이럴 경우 크롬에서는 문제가 없지만 익스플로어를 사용할경우
정확하게 말하자면 티스토리 블로그를 익스플로어로 볼경우 플래시의 ExternalInterface의 반환값은 무조건 null이 된다.

이유는 모르겠다. 단순히 익스플로어 자체에서는 문제가 없지만 티스토리블로그에서는 자바스크립트가 실행은 되지만
반환값은 null이 되어버린다.  티스토리블로그 스킨어딘가에서 문제가 일어난게 아닐까 싶지만 확실하지 않다.

다른방법 그래고 다시 실패

그래서 생각해낸것이 swf파일을 삽입할 때 나만 알수 있는 변수를 get방식으로 swf파일 뒤에 넣어 플래시안에서 받아서 적절할 경우에만 재생시키는 것이었다.

결과는 실패. 이번엔 반대로 익스플로어에선 문제가 없지만 크롬에서 변수를 인식하지 못했다. 이유는 역시 모름....

마지막방법

그래서 결국 선택한것이 두가지 동시에 하는것이다. ㅋㅋㅋ
일단 자신의 블로그스킨 편집에서 자신만이 아는 임의의 자바스크립트 함수를 만들어두고
swf를 삽입할때 또다시 자신만이 아는 임의의 변수를 플래시로 전달한다.

그래고 플래시안에서는 둘중 하나라도 값이 들어오면 재생한다.

익스플로어의 경우 get방식의 변수를 받을것이고 크롬은 자바스크립트함수의 반환값을 받을 것이다.

물론 이런 간단한 제약은 조금 노력하면 해당 자바스크립함수와 삽입되는 변수를 알수있으므로 완벽한 방법은 되지 못한다.

하지만 그정도의 지식이 있는 사람이 다른사람이 만든  swf파일을 막 퍼갈거 같진 않다.

테스트swf