www.gusucode.com > Silverlight键盘钢琴 > AphroditePiano.WebSite/Silverlight.js
if (!window.Silverlight) { window.Silverlight = { }; } // Silverlight control instance counter for memory mgt Silverlight._silverlightCount = 0; Silverlight.fwlinkRoot='http://go2.microsoft.com/fwlink/?LinkID='; Silverlight.onGetSilverlight = null; Silverlight.onSilverlightInstalled = function () {window.location.reload(false);}; ////////////////////////////////////////////////////////////////// // isInstalled, checks to see if the correct version is installed ////////////////////////////////////////////////////////////////// Silverlight.isInstalled = function(version) { var isVersionSupported=false; var container = null; try { var control = null; try { control = new ActiveXObject('AgControl.AgControl'); if ( version == null ) { isVersionSupported = true; } else if ( control.IsVersionSupported(version) ) { isVersionSupported = true; } control = null; } catch (e) { var plugin = navigator.plugins["Silverlight Plug-In"] ; if ( plugin ) { if ( version === null ) { isVersionSupported = true; } else { var actualVer = plugin.description; if ( actualVer === "1.0.30226.2") actualVer = "2.0.30226.2"; var actualVerArray =actualVer.split("."); while ( actualVerArray.length > 3) { actualVerArray.pop(); } while ( actualVerArray.length < 4) { actualVerArray.push(0); } var reqVerArray = version.split("."); while ( reqVerArray.length > 4) { reqVerArray.pop(); } var requiredVersionPart ; var actualVersionPart var index = 0; do { requiredVersionPart = parseInt(reqVerArray[index]); actualVersionPart = parseInt(actualVerArray[index]); index++; } while (index < reqVerArray.length && requiredVersionPart === actualVersionPart); if ( requiredVersionPart <= actualVersionPart && !isNaN(requiredVersionPart) ) { isVersionSupported = true; } } } } } catch (e) { isVersionSupported = false; } if (container) { document.body.removeChild(container); } return isVersionSupported; } Silverlight.WaitForInstallCompletion = function() { if ( ! Silverlight.isBrowserRestartRequired && Silverlight.onSilverlightInstalled ) { try { navigator.plugins.refresh(); } catch(e) { } if ( Silverlight.isInstalled(null) ) { Silverlight.onSilverlightInstalled(); } else { setTimeout(Silverlight.WaitForInstallCompletion, 3000); } } } Silverlight.__startup = function() { Silverlight.isBrowserRestartRequired = Silverlight.isInstalled(null);//(!window.ActiveXObject || Silverlight.isInstalled(null)); if ( !Silverlight.isBrowserRestartRequired) { Silverlight.WaitForInstallCompletion(); } if (window.removeEventListener) { window.removeEventListener('load', Silverlight.__startup , false); } else { window.detachEvent('onload', Silverlight.__startup ); } } if (window.addEventListener) { window.addEventListener('load', Silverlight.__startup , false); } else { window.attachEvent('onload', Silverlight.__startup ); } /////////////////////////////////////////////////////////////////////////////// // createObject(); Params: // parentElement of type Element, the parent element of the Silverlight Control // source of type String // id of type string // properties of type String, object literal notation { name:value, name:value, name:value}, // current properties are: width, height, background, framerate, isWindowless, enableHtmlAccess, inplaceInstallPrompt: all are of type string // events of type String, object literal notation { name:value, name:value, name:value}, // current events are onLoad onError, both are type string // initParams of type Object or object literal notation { name:value, name:value, name:value} // userContext of type Object ///////////////////////////////////////////////////////////////////////////////// Silverlight.createObject = function(source, parentElement, id, properties, events, initParams, userContext) { var slPluginHelper = new Object(); var slProperties = properties; var slEvents = events; slPluginHelper.version = slProperties.version; slProperties.source = source; slPluginHelper.alt = slProperties.alt; //rename properties to their tag property names if ( initParams ) slProperties.initParams = initParams; if ( slProperties.isWindowless && !slProperties.windowless) slProperties.windowless = slProperties.isWindowless; if ( slProperties.framerate && !slProperties.maxFramerate) slProperties.maxFramerate = slProperties.framerate; if ( id && !slProperties.id) slProperties.id = id; // remove elements which are not to be added to the instantiation tag delete slProperties.ignoreBrowserVer; delete slProperties.inplaceInstallPrompt; delete slProperties.version; delete slProperties.isWindowless; delete slProperties.framerate; delete slProperties.data; delete slProperties.src; delete slProperties.alt; // detect that the correct version of Silverlight is installed, else display install if (Silverlight.isInstalled(slPluginHelper.version)) { //move unknown events to the slProperties array for (var name in slEvents) { if ( slEvents[name]) { if ( name == "onLoad" && typeof slEvents[name] == "function" && slEvents[name].length != 1 ) { var onLoadHandler = slEvents[name]; slEvents[name]=function (sender){ return onLoadHandler(document.getElementById(id), userContext, sender)}; } var handlerName = Silverlight.__getHandlerName(slEvents[name]); if ( handlerName != null ) { slProperties[name] = handlerName; slEvents[name] = null; } else { throw "typeof events."+name+" must be 'function' or 'string'"; } } } slPluginHTML = Silverlight.buildHTML(slProperties); } //The control could not be instantiated. Show the installation prompt else { slPluginHTML = Silverlight.buildPromptHTML(slPluginHelper); } // insert or return the HTML if(parentElement) { parentElement.innerHTML = slPluginHTML; } else { return slPluginHTML; } } /////////////////////////////////////////////////////////////////////////////// // // create HTML that instantiates the control // /////////////////////////////////////////////////////////////////////////////// Silverlight.buildHTML = function( slProperties) { var htmlBuilder = []; htmlBuilder.push('<object type=\"application/x-silverlight\" data="data:application/x-silverlight,"'); if ( slProperties.id != null ) { htmlBuilder.push(' id="' + slProperties.id + '"'); } if ( slProperties.width != null ) { htmlBuilder.push(' width="' + slProperties.width+ '"'); } if ( slProperties.height != null ) { htmlBuilder.push(' height="' + slProperties.height + '"'); } htmlBuilder.push(' >'); delete slProperties.id; delete slProperties.width; delete slProperties.height; for (var name in slProperties) { if (slProperties[name]) { htmlBuilder.push('<param name="'+Silverlight.HtmlAttributeEncode(name)+'" value="'+Silverlight.HtmlAttributeEncode(slProperties[name])+'" />'); } } htmlBuilder.push('<\/object>'); return htmlBuilder.join(''); } // createObjectEx, takes a single parameter of all createObject parameters enclosed in {} Silverlight.createObjectEx = function(params) { var parameters = params; var html = Silverlight.createObject(parameters.source, parameters.parentElement, parameters.id, parameters.properties, parameters.events, parameters.initParams, parameters.context); if (parameters.parentElement == null) { return html; } } /////////////////////////////////////////////////////////////////////////////////////////////// // Builds the HTML to prompt the user to download and install Silverlight /////////////////////////////////////////////////////////////////////////////////////////////// Silverlight.buildPromptHTML = function(slPluginHelper) { var slPluginHTML = ""; var urlRoot = Silverlight.fwlinkRoot; var shortVer = slPluginHelper.version ; if ( slPluginHelper.alt ) { slPluginHTML = slPluginHelper.alt; } else { if (! shortVer ) { shortVer=""; } slPluginHTML = "<a href='javascript:Silverlight.getSilverlight(\"{1}\");' style='text-decoration: none;'><img src='{2}' alt='Get Microsoft Silverlight' style='border-style: none'/></a>"; slPluginHTML = slPluginHTML.replace('{1}', shortVer ); slPluginHTML = slPluginHTML.replace('{2}', urlRoot + '108181'); } return slPluginHTML; } Silverlight.getSilverlight = function(version) { if (Silverlight.onGetSilverlight ) { Silverlight.onGetSilverlight(); } var shortVer = ""; var reqVerArray = String(version).split("."); if (reqVerArray.length > 1) { var majorNum = parseInt(reqVerArray[0] ); if ( isNaN(majorNum) || majorNum < 2 ) { shortVer = "1.0"; } else { shortVer = reqVerArray[0]+'.'+reqVerArray[1]; } } var verArg = ""; if (shortVer.match(/^\d+\056\d+$/) ) { verArg = "&v="+shortVer; } Silverlight.followFWLink("114576" + verArg); } /////////////////////////////////////////////////////////////////////////////////////////////// /// Navigates to a url based on fwlinkid /////////////////////////////////////////////////////////////////////////////////////////////// Silverlight.followFWLink = function(linkid) { top.location=Silverlight.fwlinkRoot+String(linkid); } /////////////////////////////////////////////////////////////////////////////////////////////// /// Encodes special characters in input strings as charcodes /////////////////////////////////////////////////////////////////////////////////////////////// Silverlight.HtmlAttributeEncode = function( strInput ) { var c; var retVal = ''; if(strInput == null) { return null; } for(var cnt = 0; cnt < strInput.length; cnt++) { c = strInput.charCodeAt(cnt); if (( ( c > 96 ) && ( c < 123 ) ) || ( ( c > 64 ) && ( c < 91 ) ) || ( ( c > 43 ) && ( c < 58 ) && (c!=47)) || ( c == 95 )) { retVal = retVal + String.fromCharCode(c); } else { retVal = retVal + '&#' + c + ';'; } } return retVal; } /////////////////////////////////////////////////////////////////////////////// // // Default error handling function to be used when a custom error handler is // not present // /////////////////////////////////////////////////////////////////////////////// Silverlight.default_error_handler = function (sender, args) { var iErrorCode; var errorType = args.ErrorType; iErrorCode = args.ErrorCode; var errMsg = "\nSilverlight error message \n" ; errMsg += "ErrorCode: "+ iErrorCode + "\n"; errMsg += "ErrorType: " + errorType + " \n"; errMsg += "Message: " + args.ErrorMessage + " \n"; if (errorType == "ParserError") { errMsg += "XamlFile: " + args.xamlFile + " \n"; errMsg += "Line: " + args.lineNumber + " \n"; errMsg += "Position: " + args.charPosition + " \n"; } else if (errorType == "RuntimeError") { if (args.lineNumber != 0) { errMsg += "Line: " + args.lineNumber + " \n"; errMsg += "Position: " + args.charPosition + " \n"; } errMsg += "MethodName: " + args.methodName + " \n"; } alert (errMsg); } /////////////////////////////////////////////////////////////////////////////////////////////// /// Releases event handler resources when the page is unloaded /////////////////////////////////////////////////////////////////////////////////////////////// Silverlight.__cleanup = function () { for (var i = Silverlight._silverlightCount - 1; i >= 0; i--) { window['__slEvent' + i] = null; } Silverlight._silverlightCount = 0; if (window.removeEventListener) { window.removeEventListener('unload', Silverlight.__cleanup , false); } else { window.detachEvent('onunload', Silverlight.__cleanup ); } } /////////////////////////////////////////////////////////////////////////////////////////////// /// Releases event handler resources when the page is unloaded /////////////////////////////////////////////////////////////////////////////////////////////// Silverlight.__getHandlerName = function (handler) { var handlerName = ""; if ( typeof handler == "string") { handlerName = handler; } else if ( typeof handler == "function" ) { if (Silverlight._silverlightCount == 0) { if (window.addEventListener) { window.addEventListener('onunload', Silverlight.__cleanup , false); } else { window.attachEvent('onunload', Silverlight.__cleanup ); } } var count = Silverlight._silverlightCount++; handlerName = "__slEvent"+count; window[handlerName]=handler; } else { handlerName = null; } return handlerName; }