본문 바로가기

위기관리

MouseWheel 버그해결방법


문제

플래시에서 스크롤바를 움직이기 위해 마우스휠기능을 사용할 때 브라우저 스크롤바와 같이 움직이는 현상.


해결

일본 spark 프로젝트 팀에서 만든 코드를 사용하면 해결할 수 있는데 사용법도 쉽다.
마우스휠버그 문제를 해결하기 위해 다양한 방법들을 사용하고 있는데 이 방법을 사용하는게 가장 쉽고 안전한거 같다. SWFWheel.as 라는 클래스를 플래시 내부로 임포트 시킨 후 stage를 초기화메서드 인자로 넘겨주기만 하면된다. 기본 원리는 스크롤제어 기능을 자바스크립트로 구현해서 그 값을 플래시로 넘겨받아서 스크롤을 구현하는 방식이다.

보통 자바스크립트는 html 에 구현하는데 ExternalInterface 클래스를 이용해 자바스크립트와 통신하는 부분을 클래스내부에 구현해서 사용했기 때문에 사용성에 있어서 아주 편리하고 모든 크로스OS, 크로스브라우저에서 구현된다는 장점이 있다.

참고링크

js 구현부 :
http://www.libspark.org/browser/as3/SWFWheel/trunk/zoo/swfwheel.js
클래스 구현부 : http://www.libspark.org/browser/as3/SWFWheel/trunk/src/org/libspark/ui/SWFWheel.as

다운로드 링크 : http://www.libspark.org/svn/as3/SWFWheel/trunk/src/org/libspark/ui/

사용할땐 클래스 구현부에 있는 소스 SWFWheel.as 파일만 다운로드 받아서 사용하면 된다. 사용할땐 패키지구조를 맞춰서 사용하는걸 잊지말자.

- 사용법
import org.libspark.ui.SWFWheel;

//생성자 부분 또는 초기화 부분
public function 생성자()
{
     Security.allowDomain( '허용도메인명');//크로스스크립팅 플래시 F1 도움말 참조
     SWFWheel.initialize( stage );
     SWFWheel.browserScroll = false;
}

//마우스휠 이벤트구현부
private function setEvent(): void
{
     stage.addEventListener( MouseEvent.MOUSE_WHEEL, mouseWheelHandler );
}
private function mouseWheelHandler(): void
{
     //내부메서드 구현
}

- html 내부 swfobject 구현부

var flashvars = {};
var params = {};
var attributes = {
          id: "myContents",
          name: "myContents";
}
swfobject.embedSWF("myContent.swf", "div_myContent", "550", "400", "9.0.0", flashvars, params, attributes );

- 추가로 확인해야할 부분

allowScriptAccess
SWF 파일을 로드하는 HTML 코드의 AllowScriptAccess 매개 변수는 SWF 파일 내에서 아웃바운드 스크립팅을 수행하는 기능을 제어합니다. SWF 파일을 호스트하는 웹 페이지의 HTML 코드에 이 매개 변수를 설정합니다. PARAM 또는 EMBED 태그에 매개 변수를 설정합니다.AllowScriptAccess 매개 변수는 가능한 세 가지 값, "always", "sameDomain" 또는 "never" 중 하나를 가질 수 있습니다.

  • AllowScriptAccess"sameDomain"이면 SWF 파일과 해당 웹 페이지가 동일한 도메인에 있는 경우에만 아웃바운드 스크립팅이 허용됩니다. AVM2 내용의 기본값입니다.
  • AllowScriptAccess"never"이면 아웃바운드 스크립팅은 항상 실패합니다.
  • AllowScriptAccess"always"이면 아웃바운드 스크립팅은 항상 성공합니다.

allowNetworking

SWF 내용을 포함하는 HTML 페이지의 <object><embed> 태그에서 allowNetworking 매개 변수를 설정하여 네트워크 기능에 대한 SWF 파일의 액세스를 제어할 수 있습니다.

allowNetworking
의 가능한 값은 다음과 같습니다.

  • "all"(기본값) - SWF에서 모든 네트워크 API가 허용됩니다.
  • "internal" - SWF 파일에서 이 단원의 뒷부분에 나열되어 있는 브라우저 내비게이션이나 브라우저 상호 작용 API를 호출할 수 없지만 다른 네트워킹 API를 호출할 수 있습니다.
  • "none" - SWF 파일에서 이 단원의 뒷부분에 나열되어 있는 브라우저 내비게이션이나 브라우저 상호 작용 API를 호출할 수 없고 마찬가지로 뒷부분에 나열되어 있는 모든 SWF 간 통신 API를 사용할 수 없습니다.

 

자세한 내용은 플래시 F1도움말 참조