UNPKG

dojo-util

Version:

Dojo utilities including build system for optimizing JavaScript application performance, and DOH testing tool

215 lines (198 loc) 7.28 kB
<!DOCTYPE html> <html style="margin:0px; padding:0px; border:0px none; overflow:hidden;"> <head> <script> // support document.domain // Yes, we need this try/catch to handle document.domain. // If one page explicitly sets document.domain, // ALL pages (this page, test case, page to be tested) must also explicitly set document.domain, // or you get Permission Denied. // So it's not as easy as just setting document.domain to whatever the browser reports, // because you don't know if the user explicitly set that. try{ // Was the passed domain just a stupid browser default? // If so, this statement will work. var test=window.frameElement.ownerDocument; }catch(e){ // Permission Denied. // Means user explicitly set document.domain elsewhere. // robot.js passes the document.domain as a GET parameter. var domain=unescape(/[\\?&]domain=([^&#]*)/.exec(window.location.href)[1]); document.domain=domain; } // Setup global "doh" and "robot" variables to point to doh and doh/robot modules that have already // been loaded in parent frame (ie, the main document) var doc = window.frameElement.ownerDocument; var w = doc.parentWindow || doc.defaultView || top; doh = w.require("doh/_browserRunner"); robot = w.require("doh/robot"); function init(){ var applet = document.getElementsByTagName('applet')[0]; robot._killApplet = function(){ document.body.removeChild(applet); applet = null; }; } // the box that the applet writes into to test the user's keyboard capabilities var _robotField = null; /* Robot uses the event handlers below to measure system-level properties that the java.awt.Robot class just expects us to know magically. For instance, we don't know how big the user set their mouse wheel to be in the Control Panel, so we measure it using onmousewheel. */ function _onfocus(robotField){ _robotField = robotField; robot._initWheel(); } function _onblur(e){ setTimeout(function(){ if(_robotField && _robotField.parentNode == document.body){ document.body.removeChild(_robotField); } },0); } var receivedMouseDown = false; function _onmousedown(e){ if(receivedMouseDown){ return; } receivedMouseDown=true; e = e||window.event; if(e.screenX == 0||e.clientX == 0){ return; } var docScreenX = e.screenX-e.clientX; var docScreenY = e.screenY-e.clientY; robot._setDocumentBounds(docScreenX, docScreenY); if("stopPropagation" in e){ e.stopPropagation(); } else { e.cancelBubble = false; } return false; } function _onmousewheel(e){ e = e||window.event; robot.mouseWheelSize = e.detail ? (e.detail * -1) : (e.wheelDelta / 120); if(e.preventDefault){ e.preventDefault(); } else { e.returnValue = false; } robot._primePump = true; robot._initKeyboard(); return false; } var charCode = 32; var keystring = ""; var expectedlength = 0; robot._nextKeyGroup = function(size){ // called from Robot // moves to the next group of keys to press; shift, alt-graph etc. expectedlength = size; keystring = ""; }; function _onkeypress(e){ e = e||window.event; var c = e.charCode ? e.charCode : (e.keyCode ? e.keyCode : (e.which ? e.which : 0)); // opera if(robot._primePump){ // event pump was primed with spaces and JS finally received one // tell robot to stop sending spaces now if(c == 32){ robot._spaceReceived = true; } else if(c == 13){ // enter: start accepting keys robot._primePump = false; } } else if(c == 32){ keystring += String.fromCharCode(charCode); charCode = 32; if(keystring.length >= expectedlength){ robot._notified(keystring); } } else if(c > 32){ // printable charCode = c; } // keyboard discovery misbehaves on Safari/Mac // prevent default action if possible if(e.preventDefault){ e.preventDefault(); } else { e.returnValue = false; } return false; } var rf=null; robot._onKeyboard = function(){ // called from Robot // Robot calls _onKeyboard after it finishes discovering the keyboard // need to untie from Java thread with setTimeout setTimeout(function(){ rf.style.visibility = "hidden"; robot._run(window.frameElement); }, 0); }; // stubs to help FF23+ new security policies window._onKeyboard=function(){ robot._onKeyboard(); } window._nextKeyGroup=function(size){ robot._nextKeyGroup(size); } </script> </head> <body id="robotBody" style="margin:0px; padding:0px; border:0px none;background-color:transparent;" onload="init()"> <input type="text" tabIndex="-1" style="border:0px none;margin:0px;padding:0px;width:200px;height:100px;background-color:white;z-index:9998;opacity:0;filter:alpha(opacity=0);cursor:default;" onmousewheel="_onmousewheel(arguments[0])" onmousedown="_onmousedown(arguments[0])" onkeypress="_onkeypress(arguments[0])" onfocus="_onfocus(this)" onblur="_onblur(arguments[0])"></input> <script> rf = document.getElementsByTagName('input')[0]; if(rf.addEventListener){ rf.addEventListener('DOMMouseScroll', _onmousewheel, false); } </script> <img src="robot/signature.png" style="width:3px; height:3px; position:absolute; left:0px; top:0px; z-index:9999"></img> <script> // taken from hostenv_browser.js // Dojo is not always available to DOH var needsSecurityManager='<param name="needsSecurityManager" value="'+(( (Math.max(navigator.appVersion.indexOf("WebKit"), navigator.appVersion.indexOf("Safari"), 0) > 0 && navigator.userAgent.indexOf("Chrome/") == -1 && parseFloat(navigator.appVersion.split("Version/")[1]) < 4) // Safari 3 || (document.all && navigator.userAgent.indexOf("Opera") == -1 && parseFloat(navigator.appVersion.split("MSIE ")[1]) < 8)) // IE6,7 ?"true":"false")+'">'; var appletString = '<applet width="1" height="1" code="DOHRobot.class" archive="robot/DOHRobot.jar" MAYSCRIPT style="position:absolute;left:0px;top:0px;"><param name="mayscript" value="true"><param name="scriptable" value="true"><param name="initial_focus" value="false">'+needsSecurityManager+'</applet>'; document.write(appletString); // if no Java, the applet is officially dead if(/MSIE/.test(navigator.appVersion)){ // navigator.javaEnabled() not known for its reliability in IE6 try{ // applet loads synchronously in IE6 document.applets[0].isActive(); }catch(e){ robot._appletDead=true; // IE skips the dojo.robot XHR test below in the else // since the no java behavior is the same as no applet behavior in IE doh.run(); } }else if(!navigator.javaEnabled()){ // FF, Safari, Opera etc. // unreliable in IE6 robot._appletDead=true; doh.run(); }else{ // Opera etc. have Java enabled, but load the applet asychronously so it might still be missing from server at this point // Do an XHR to find out if the applet is there // IE is taken care of in the first if, so no need for special ActiveX XHR for it var dohRobotCheck=new XMLHttpRequest(); dohRobotCheck.onreadystatechange=function(){ if(dohRobotCheck.readyState == 4 && dohRobotCheck.status == 404){ // oops! no applet // move the tests along robot._appletDead=true; doh.run(); } }; dohRobotCheck.open("HEAD", "robot/DOHRobot.jar"); dohRobotCheck.send(null); } </script> </body> </html>