原文地址: 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方法中处理添加右键代码