diff options
author | Ian Moore <ian.moore@fireeye.com> | 2015-07-29 12:12:26 -0400 |
---|---|---|
committer | Ian Moore <ian.moore@fireeye.com> | 2015-07-29 12:12:26 -0400 |
commit | 83e0bc0d26bd88925053ac3a6cc84edf7236f18e (patch) | |
tree | 18ac7e2f300934ba12dcdc20531b2de6813ffde9 /rdpweb/webclient.js | |
parent | 76a645369fd0dc61bca879ec5f083464d62a7369 (diff) | |
download | phpvirtualbox-83e0bc0d26bd88925053ac3a6cc84edf7236f18e.zip phpvirtualbox-83e0bc0d26bd88925053ac3a6cc84edf7236f18e.tar.gz phpvirtualbox-83e0bc0d26bd88925053ac3a6cc84edf7236f18e.tar.bz2 |
Move source tree up one level
Diffstat (limited to 'rdpweb/webclient.js')
-rw-r--r-- | rdpweb/webclient.js | 206 |
1 files changed, 206 insertions, 0 deletions
diff --git a/rdpweb/webclient.js b/rdpweb/webclient.js new file mode 100644 index 0000000..ece8503 --- /dev/null +++ b/rdpweb/webclient.js @@ -0,0 +1,206 @@ +/* JS helpers for the Flash RDP Web Control. + * + * Methods started with '_' are for internal use and must not be called. + * Methods started with '_control' are called from the SWF. + */ +var RDPWebClient = { + RDPWebUUID: "747f07ac-c30b-4439-826d-7b5c67fd47e7", + embedSWF: function (FlashFileName, FlashId) + { + /* Create the Flash object. */ + var flashvars = {}; + flashvars.flashId = FlashId; + + var params = {}; + params.wmode="opaque"; + params.menu="false"; + params.bgcolor="#ffffff"; + params.quality="low"; + params.allowScriptAccess="always"; + + var attributes = {}; + + /* Make sure that the SWF will be reloaded from the server, not from browser cache. */ + var stamp = new Date(); + var seed = "?s=" + stamp.getTime(); + + swfobject.embedSWF(FlashFileName + seed, FlashId, "100%", "100%", "9.0.0", + "", flashvars, params, attributes); + }, + isRDPWebControlById: function(Id) + { + var flash = RDPWebClient.getFlashById(Id); + return RDPWebClient.isRDPWebControlByElement(flash); + }, + isRDPWebControlByElement: function(element) + { + if (element && element.getProperty) + { + var uuid = element.getProperty("UUID"); + if (uuid == RDPWebClient.RDPWebUUID) + { + return true; + } + } + return false; + }, + _controlInit: function (FlashId) + { + var flash = RDPWebClient.getFlashById(FlashId); + + if (flash) + { + if (window.addEventListener) + { + /* Mozilla */ + window.addEventListener("contextmenu", function(event) { return RDPWebClient._MozillaContextMenu(event); }, true); + window.addEventListener("mousedown", function(event) { return RDPWebClient._MozillaMouse(event, true); }, true); + window.addEventListener("mouseup", function(event) { return RDPWebClient._MozillaMouse(event, false); }, true); + flash.addEventListener("mouseout", function(event) { return RDPWebClient._MozillaMouseOut(event); }, true); + } + else + { + document.oncontextmenu = function() { return RDPWebClient._IEContextMenu(); } + flash.parentNode.onmousedown = function() { return RDPWebClient._IEMouse(true); } + flash.parentNode.onmouseup = function() { return RDPWebClient._IEMouse(false); } + flash.onmouseout=function() {return RDPWebClient._IEMouseOut(); } + } + } + }, + _controlResize: function(flashId, width, height, reason) + { + var e = document.getElementById(flashId + 'Container'); + if (e) + { + e.style.width=width + "px"; + e.style.height=height + "px"; + } + }, + _IEMouseOut: function() + { + if (window.event && RDPWebClient.isRDPWebControlById(window.event.srcElement.id)) + { + RDPWebClient._callMouseOut(window.event.srcElement.id); + } + return true; + }, + _IECancelEvent: function() + { + window.event.returnValue = false; + window.event.cancelBubble = true; + return false; + }, + _IEContextMenu: function() + { + if (window.event && RDPWebClient.isRDPWebControlById(window.event.srcElement.id)) + { + return RDPWebClient._IECancelEvent(); + } + }, + _IEMouse: function(fMouseDown) + { + if (window.event && RDPWebClient.isRDPWebControlById(window.event.srcElement.id)) + { + if (window.event.button == 2) + { + if (fMouseDown == true) + { + RDPWebClient.getFlashById(window.event.srcElement.id).parentNode.setCapture(); + RDPWebClient._callRightMouseDown(window.event.srcElement.id); + } + else + { + RDPWebClient._callRightMouseUp(window.event.srcElement.id); + RDPWebClient.getFlashById(window.event.srcElement.id).parentNode.releaseCapture(); + } + return RDPWebClient._IECancelEvent(); + } + } + }, + _MozillaMouseOut: function(event) + { + if (RDPWebClient.isRDPWebControlById(event.target.id)) + { + RDPWebClient._callMouseOut(event.target.id); + } + return true; + }, + _MozillaCancelEvent: function(event) + { + if (event) + { + if (event.preventBubble) event.preventBubble(); + if (event.preventCapture) event.preventCapture(); + if (event.preventDefault) event.preventDefault(); + if (event.stopPropagation) event.stopPropagation(); + } + }, + _MozillaContextMenu: function(event) + { + if (RDPWebClient.isRDPWebControlById(event.target.id)) + { + RDPWebClient._MozillaCancelEvent(event); + } + }, + _MozillaMouse: function(event, fMouseDown) + { + if (RDPWebClient.isRDPWebControlById(event.target.id)) + { + if (event.button == 2) + { + if (fMouseDown) + { + RDPWebClient._callRightMouseDown(event.target.id); + } + else + { + RDPWebClient._callRightMouseUp(event.target.id); + } + RDPWebClient._MozillaCancelEvent(event); + } + } + }, + _callRightMouseDown: function(FlashId) + { + var flash = RDPWebClient.getFlashById(FlashId); + if (flash && flash.rightMouseDown) + { + try + { + flash.rightMouseDown(); + } + catch (e) {}; /* Hack for IE, which calls the Flash method but then throws the exception. */ + } + }, + _callRightMouseUp: function(FlashId) + { + var flash = RDPWebClient.getFlashById(FlashId); + if (flash && flash.rightMouseUp) + { + try + { + flash.rightMouseUp(); + } + catch (e) {}; /* Hack for IE, which calls the Flash method but then throws the exception. */ + } + }, + _callMouseOut: function(FlashId) + { + var flash = RDPWebClient.getFlashById(FlashId); + if (flash && flash.mouseOut) + { + try + { + flash.mouseOut(); + } + catch (e) {}; /* Hack for IE, which calls the Flash method but then throws the exception. */ + } + }, + getFlashById: function(flashId) + { + if (document.embeds && document.embeds[flashId]) + return document.embeds[flashId]; + + return document.getElementById(flashId); + } +} |