加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

flex 右键,RightClickLib 火狐修正

发布时间:2020-12-15 01:30:47 所属栏目:百科 来源:网络整理
导读:flex右键,google一下,文章挺多的,用了两年了才发先最近的火狐新版本支持不好了,右键点击一下,flash就崩溃了,后来跟踪发现是RightClickManager.as 中的js在firefox环境下没有获取到flash对象,也就没办法call as方法了,经修正的支持火狐和IE9的RightCl

flex右键,google一下,文章挺多的,用了两年了才发先最近的火狐新版本支持不好了,右键点击一下,flash就崩溃了,后来跟踪发现是RightClickManager.as 中的js在firefox环境下没有获取到flash对象,也就没办法call as方法了,经修正的支持火狐和IE9的RightClickManager.as文件如下,

?

package com.siloon.plugin.rightClick
{
?import flash.display.DisplayObject;
?import flash.events.MouseEvent;
?import flash.external.ExternalInterface;
?
?import mx.core.FlexGlobals;
?
?public class RightClickManager
?{
??static private 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() {
???????var movieName = this.FlashObjectID;
???????var e;
???????if (window.document[movieName]) {
????????e = window.document[movieName];
???????}
???????if (navigator.appName.indexOf("Microsoft Internet") == -1) {
????????if (document.embeds && document.embeds[movieName])
?????????e = document.embeds[movieName];
???????}else{
????????e = document.getElementById(movieName);
???????}
???????if(e!=null){
????????e.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;
??????? }

?}}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读