flex4 完全屏蔽右键菜单

原文地址: http://hi.baidu.com/vlybrcexwwbblvq/item/e3f4ab3dde40accb2e8ec2aa

1、保存如下代码 RightClickManager.as
RightClickManager.as
package superengineflex.tool
{
 import flash.display.DisplayObject;
 import flash.events.MouseEvent;
 import flash.external.ExternalInterface;
 
 import mx.core.Application;
 
 public class RightClickManager
 {
  static private var rightClickTarget:DisplayObject;
        static public const RIGHT_CLICK:String = "rightClick";
        static private const javascript:XML =
        <script>
         <![CDATA[
    function(flashObjectId)
    {   
     var RightClick = {
      /**
       *  Constructor
       */
      init: function (flashObjectId) {
       this.FlashObjectID = flashObjectId;
       this.Cache = this.FlashObjectID;
       if(window.addEventListener){
         window.addEventListener("mousedown", this.onGeckoMouse(), true);
       } else {
        document.getElementById(this.FlashObjectID).parentNode.onmouseup = function() { document.getElementById(RightClick.FlashObjectID).parentNode.releaseCapture(); }
        document.oncontextmenu = function(){ if(window.event.srcElement.id == RightClick.FlashObjectID) { return false; } else { RightClick.Cache = "nan"; }}
        document.getElementById(this.FlashObjectID).parentNode.onmousedown = RightClick.onIEMouse;
       }
      },
      /**
       * GECKO / WEBKIT event overkill
       * @param {Object} eventObject
       */
      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();
       }
      },
      /**
       * GECKO / WEBKIT call right click
       * @param {Object} ev
       */
      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;
       }
        }
      },
      /**
       * IE call right click
       * @param {Object} ev
       */
      onIEMouse: function() {
         if (event.button > 1) {
        if(window.event.srcElement.id == RightClick.FlashObjectID && RightClick.Cache == RightClick.FlashObjectID) {
         RightClick.call();
        }
        document.getElementById(RightClick.FlashObjectID).parentNode.setCapture();
        if(window.event.srcElement.id)
        RightClick.Cache = window.event.srcElement.id;
       }
      },
      /**
       * Main call to Flash External Interface
       */
      call: function() {
       document.getElementById(this.FlashObjectID).rightClick();
      }
     }
    
     RightClick.init(flashObjectId);
    }
         ]]>
        </script>;

        public function RightClickManager()
        {
            return;
        }

        static public function regist() : Boolean
        {
            if (ExternalInterface.available)
            {
                ExternalInterface.call(javascript, ExternalInterface.objectID);
                ExternalInterface.addCallback("rightClick", dispatchRightClickEvent);
                Application.application.addEventListener(MouseEvent.MOUSE_OVER,mouseOverHandler);
            }// end if
            return true;
        }

        static private function mouseOverHandler(event:MouseEvent) : void
        {
   rightClickTarget = DisplayObject(event.target);
            return;
        }

        static private function dispatchRightClickEvent() : void
        {
   var event:MouseEvent;
            if (rightClickTarget != null)
            {
                event = new MouseEvent(RIGHT_CLICK, true, false, rightClickTarget.mouseX, rightClickTarget.mouseY);
                rightClickTarget.dispatchEvent(event);
            }// end if
            return;
        }

 }
}
///

2、修改html-template文件夹下index.template.html如下
 <script type="text/javascript">
  <!-- For version detection, set to min. required Flash Player version, or 0 (or 0.0.0), for no version detection. --> 
  var swfVersionStr = "${version_major}.${version_minor}.${version_revision}";
  <!-- To use express install, set to playerProductInstall.swf, otherwise the empty string. -->
  var xiSwfUrlStr = "${expressInstallSwf}";
  var flashvars = {};
  var params = {};
  params.quality = "high";
  params.bgcolor = "${bgcolor}";
  params.allowscriptaccess = "sameDomain";
  params.allowfullscreen = "true";
  params.wmode = "opaque"; // 注意这里,这里是关键部分
  var attributes = {};
  attributes.id = "${application}";
  attributes.name = "${application}";
  attributes.align = "middle";
  swfobject.embedSWF(
  "${swf}.swf", "flashContent", 
  "${width}", "${height}", 
  swfVersionStr, xiSwfUrlStr, 
  flashvars, params, attributes);
<!-- JavaScript enabled so display the flashContent div in case it is not replaced with a swf object. -->
swfobject.createCSS("#flashContent", "display:block;text-align:left;");
  </script>

3、在需要添加右键事件初始化方法中添加如下代码 注意导入命名空间
RightClickManager.regist();
this.addEventListener(RightClickManager.RIGHT_CLICK,rightClickHandler);

4、在rightClickHandler方法中处理添加右键代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值