Rev. 2.73

flash-3.gif

Paulius Uza씨는 자바스크립트를 이용하여 플래시의 마우스 오른쪽 버튼을 커스토마이즈하는 프로젝트를 Google Code에 포스팅했습니다. 자바스크립트로 마우스 오른쪽 버튼의 이벤트를 가로채 플래시 오브젝트로 전달하는 원리입니다. 이로서 플래시는 조금 더 사용자경험이 풍부한 인터페이스를 제공할 수 있겠네요. 플래시로 만들어진 컨텐츠인지 구분하기 위해서 마우스 오른쪽 버튼만으로 확신해서는 안되겠습니다.

var RightClick = {
  init: function () {
    this.FlashObjectID = "customRightClick";
    this.FlashContainerID = "flashcontent";
    this.Cache = this.FlashObjectID;
    if (window.addEventListener) {
       window.addEventListener("mousedown", this.onGeckoMouse(), true);
    } else {
      document.getElementById(this.FlashContainerID).onmouseup = function() {
        document.getElementById(RightClick.FlashContainerID).releaseCapture();
      }
      document.oncontextmenu = function() {
        if (window.event.srcElement.id == RightClick.FlashObjectID) {
          return false;
        } else {
          RightClick.Cache = "nan";
        }
      }
      document.getElementById(this.FlashContainerID).onmousedown = RightClick.onIEMouse;
    }
  },
  killEvents: function(eventObject) {
    if (eventObject) {
      if (eventObject.stopPropagation) eventObject.stopPropagation();
      if (eventObject.preventDefault) eventObject.preventDefault();
      if (eventObject.preventCapture) eventObject.preventCapture();
      if (eventObject.preventBubble) eventObject.preventBubble();
    }
  },
  onGeckoMouse: function(ev) {
    return function(ev) {
      if (ev.button != 0) {
        RightClick.killEvents(ev);
        if (ev.target.id == RightClick.FlashObjectID && RightClick.Cache == RightClick.FlashObjectID) {
          RightClick.call();
        }
        RightClick.Cache = ev.target.id;
      }
    }
  },
  onIEMouse: function() {
    if (event.button > 1) {
      if (window.event.srcElement.id == RightClick.FlashObjectID && RightClick.Cache == RightClick.FlashObjectID) {
        RightClick.call(); 
      }
      document.getElementById(RightClick.FlashContainerID).setCapture();
      if (window.event.srcElement.id) {
        RightClick.Cache = window.event.srcElement.id;
      }
    }
  },
  call: function() {
    document.getElementById(this.FlashObjectID).rightClick();
  }
};

Comments

Got something to add? You can just leave a comment.

Your Reaction Time!

captcha

avatar