Christopher Huyler 发布了something similar(源代码available here)。来自文章:
首先从 Google's code repository 获取 Javascript 代码。
第 1 步 - 设置自定义上下文菜单代码
在 Flex Builder 中创建一个新的 Flex 项目。将 rightclick.js 和 swfobject.js 复制到项目的 html-template 文件夹中。从这里开始,我不得不做出一些改变……
- 我修改了 RightClick.init() 函数以接受对象和容器值作为输入。这允许我将应用程序的名称作为对象传递,而不是每次都调用相同的东西。
- 我在 index.template.html 的头部包含了 rightclick.js 和 swfobject.js。
- 我在正文中添加了一个名为“flashcontent”的新 div。
- 我在 body 标记中添加了一个 onload 处理程序来初始化 RightClick
- 我用新的 SWFObject(…) 替换了 AC_FL_RunContent(…),确保保留所有模板变量。
进行这些更改后,我确认我的应用程序中没有出现右键单击上下文菜单。
第 2 步 - 监听 rightClick 事件
接下来,我在我的应用程序的主 mxml 文件中添加了几行,以侦听当我右键单击我的应用程序时将分派的 ExternalInterface 事件。
private function handleCreationComplete():void
{
ExternalInterface.addCallback("rightClick", handleRightClick);
}
private function handleRightClick():void
{
Alert.show("Right Click Success!");
}
第 3 步 - 将事件分派到正确的对象
将事件传递给主应用程序很容易,但我们实际上希望在发生右键单击事件时通知相应的子对象。由于我没有在我的应用程序中使用任何双击事件,我决定将每个右键单击事件都视为双击事件。没有两键鼠标的用户(也称为 Mac 用户)只需双击即可获得相同的菜单,而使用两键鼠标的用户只需右键单击即可。以下是我如何确保将事件分派到适当的对象。
private function handleRightClick():void
{
var objects:Array = systemManager.getObjectsUnderPoint(
new Point(mouseX,mouseY));
if (objects.length>0)
{
var object:Object = objects[objects.length-1];
var relatedObject:InteractiveObject;
if (object is InteractiveObject)
relatedObject = object as InteractiveObject;
else if (object.parent && object.parent is InteractiveObject)
relatedObject = object.parent;
var event:MouseEvent = new MouseEvent(
MouseEvent.DOUBLE_CLICK,true,false,mouseX,mouseY,
relatedObject);
object.dispatchEvent(event);
}
}
我希望这会有所帮助!