RightClick for Flash Player

{
	import flash.display.DisplayObject;
	import flash.events.MouseEvent;
	import flash.external.ExternalInterface;
	
	import mx.core.Application;
	import mx.core.FlexGlobals;
	
	public class RightClickManager
	{
		static public var rightClickTarget:DisplayObject;
        static public const RIGHT_CLICK:String = "rightClick";
        static private const javascript:XML = 
        <script>
        	<![CDATA[
        		/**
				 * 
				 * Copyright 2007
				 * 
				 * Paulius Uza
				 * http://www.uza.lt
				 * 
				 * Dan Florio
				 * http://www.polygeek.com
				 * 
				 * Project website:
				 * http://code.google.com/p/custom-context-menu/
				 * 
				 * --
				 * RightClick for Flash Player. 
				 * Version 0.6.2
				 * 
				 */
				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);
				FlexGlobals.topLevelApplication.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;
        }
		
		static public function setRightClickTargetNULL():void{
			rightClickTarget = null;
		}
	}
}



{
	import flash.display.Sprite;
	
	import mx.utils.NameUtil;
	
	[Event(name="rightClick",type="flash.events.MouseEvent")]
	public dynamic class RightClickRegister extends Sprite
	{   
		private var rightClickRegisted:Boolean = false;
		
		public function RightClickRegister()
		{
			if (!rightClickRegisted)
			{
				RightClickManager.regist();
				rightClickRegisted = true;
			}
			try
			{
				name = NameUtil.createUniqueName(this);
			}
			catch (e:Error)
			{
			}
			return;
		}
		
		public override function toString():String
		{
			return NameUtil.displayObjectToString(this);
		}
	}
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值