Silverlight.js
上传用户:jxqhsy
上传日期:2020-12-31
资源大小:1793k
文件大小:15k
源码类别:

SilverLight

开发平台:

HTML/CSS

  1. if (!window.Silverlight)
  2. {
  3.     window.Silverlight = { };
  4. }
  5. // Silverlight control instance counter for memory mgt
  6. Silverlight._silverlightCount = 0;
  7. Silverlight.fwlinkRoot='http://go2.microsoft.com/fwlink/?LinkID=';  
  8. Silverlight.onGetSilverlight = null;
  9. Silverlight.onSilverlightInstalled = function () {window.location.reload(false);};
  10. //////////////////////////////////////////////////////////////////
  11. // isInstalled, checks to see if the correct version is installed
  12. //////////////////////////////////////////////////////////////////
  13. Silverlight.isInstalled = function(version)
  14. {
  15.     var isVersionSupported=false;
  16.     var container = null;
  17.     
  18.     try 
  19.     {
  20.         var control = null;
  21.         
  22.         try
  23.         {
  24.             control = new ActiveXObject('AgControl.AgControl');
  25.             if ( version == null )
  26.             {
  27.                 isVersionSupported = true;
  28.             }
  29.             else if ( control.IsVersionSupported(version) )
  30.             {
  31.                 isVersionSupported = true;
  32.             }
  33.             control = null;
  34.         }
  35.         catch (e)
  36.         {
  37.             var plugin = navigator.plugins["Silverlight Plug-In"] ;
  38.             if ( plugin )
  39.             {
  40.                 if ( version === null )
  41.                 {
  42.                     isVersionSupported = true;
  43.                 }
  44.                 else
  45.                 {
  46.                     var actualVer = plugin.description;
  47.                     if ( actualVer === "1.0.30226.2")
  48.                         actualVer = "2.0.30226.2";
  49.                     var actualVerArray =actualVer.split(".");
  50.                     while ( actualVerArray.length > 3)
  51.                     {
  52.                         actualVerArray.pop();
  53.                     }
  54.                     while ( actualVerArray.length < 4)
  55.                     {
  56.                         actualVerArray.push(0);
  57.                     }
  58.                     var reqVerArray = version.split(".");
  59.                     while ( reqVerArray.length > 4)
  60.                     {
  61.                         reqVerArray.pop();
  62.                     }
  63.                     
  64.                     var requiredVersionPart ;
  65.                     var actualVersionPart
  66.                     var index = 0;
  67.                     
  68.                     
  69.                     do
  70.                     {
  71.                         requiredVersionPart = parseInt(reqVerArray[index]);
  72.                         actualVersionPart = parseInt(actualVerArray[index]);
  73.                         index++;
  74.                     }
  75.                     while (index < reqVerArray.length && requiredVersionPart === actualVersionPart);
  76.                     
  77.                     if ( requiredVersionPart <= actualVersionPart && !isNaN(requiredVersionPart) )
  78.                     {
  79.                         isVersionSupported = true;
  80.                     }
  81.                 }
  82.             }
  83.         }
  84.     }
  85.     catch (e) 
  86.     {
  87.         isVersionSupported = false;
  88.     }
  89.     if (container) 
  90.     {
  91.         document.body.removeChild(container);
  92.     }
  93.     
  94.     return isVersionSupported;
  95. }
  96. Silverlight.WaitForInstallCompletion = function()
  97. {
  98.     if ( ! Silverlight.isBrowserRestartRequired && Silverlight.onSilverlightInstalled )
  99.     {
  100.         try
  101.         {
  102.             navigator.plugins.refresh();
  103.         }
  104.         catch(e)
  105.         {
  106.         }
  107.         if ( Silverlight.isInstalled(null) )
  108.         {
  109.             Silverlight.onSilverlightInstalled();
  110.         }
  111.         else
  112.         {
  113.               setTimeout(Silverlight.WaitForInstallCompletion, 3000);
  114.         }    
  115.     }
  116. }
  117. Silverlight.__startup = function()
  118. {
  119.     Silverlight.isBrowserRestartRequired = Silverlight.isInstalled(null);//(!window.ActiveXObject || Silverlight.isInstalled(null));
  120.     if ( !Silverlight.isBrowserRestartRequired)
  121.     {
  122.         Silverlight.WaitForInstallCompletion();
  123.     }
  124.     if (window.removeEventListener) { 
  125.        window.removeEventListener('load', Silverlight.__startup , false);
  126.     }
  127.     else { 
  128.         window.detachEvent('onload', Silverlight.__startup );
  129.     }
  130. }
  131. if (window.addEventListener) 
  132. {
  133.     window.addEventListener('load', Silverlight.__startup , false);
  134. }
  135. else 
  136. {
  137.     window.attachEvent('onload', Silverlight.__startup );
  138. }
  139. ///////////////////////////////////////////////////////////////////////////////
  140. // createObject();  Params:
  141. // parentElement of type Element, the parent element of the Silverlight Control
  142. // source of type String
  143. // id of type string
  144. // properties of type String, object literal notation { name:value, name:value, name:value},
  145. //     current properties are: width, height, background, framerate, isWindowless, enableHtmlAccess, inplaceInstallPrompt:  all are of type string
  146. // events of type String, object literal notation { name:value, name:value, name:value},
  147. //     current events are onLoad onError, both are type string
  148. // initParams of type Object or object literal notation { name:value, name:value, name:value}
  149. // userContext of type Object
  150. /////////////////////////////////////////////////////////////////////////////////
  151. Silverlight.createObject = function(source, parentElement, id, properties, events, initParams, userContext)
  152. {
  153.     var slPluginHelper = new Object();
  154.     var slProperties = properties;
  155.     var slEvents = events;
  156.     
  157.     slPluginHelper.version = slProperties.version;
  158.     slProperties.source = source;    
  159.     slPluginHelper.alt = slProperties.alt;
  160.     
  161.     //rename properties to their tag property names
  162.     if ( initParams )
  163.         slProperties.initParams = initParams;
  164.     if ( slProperties.isWindowless && !slProperties.windowless)
  165.         slProperties.windowless = slProperties.isWindowless;
  166.     if ( slProperties.framerate && !slProperties.maxFramerate)
  167.         slProperties.maxFramerate = slProperties.framerate;
  168.     if ( id && !slProperties.id)
  169.         slProperties.id = id;
  170.     
  171.     // remove elements which are not to be added to the instantiation tag
  172.     delete slProperties.ignoreBrowserVer;
  173.     delete slProperties.inplaceInstallPrompt;
  174.     delete slProperties.version;
  175.     delete slProperties.isWindowless;
  176.     delete slProperties.framerate;
  177.     delete slProperties.data;
  178.     delete slProperties.src;
  179.     delete slProperties.alt;
  180.     // detect that the correct version of Silverlight is installed, else display install
  181.     if (Silverlight.isInstalled(slPluginHelper.version))
  182.     {
  183.         //move unknown events to the slProperties array
  184.         for (var name in slEvents)
  185.         {
  186.             if ( slEvents[name])
  187.             {
  188.                 if ( name == "onLoad" && typeof slEvents[name] == "function" && slEvents[name].length != 1 )
  189.                 {
  190.                     var onLoadHandler = slEvents[name];
  191.                     slEvents[name]=function (sender){ return onLoadHandler(document.getElementById(id), userContext, sender)};
  192.                 }
  193.                 var handlerName = Silverlight.__getHandlerName(slEvents[name]);
  194.                 if ( handlerName != null )
  195.                 {
  196.                     slProperties[name] = handlerName;
  197.                     slEvents[name] = null;
  198.                 }
  199.                 else
  200.                 {
  201.                     throw "typeof events."+name+" must be 'function' or 'string'";
  202.                 }
  203.             }
  204.         }
  205.         slPluginHTML = Silverlight.buildHTML(slProperties);
  206.     }
  207.     //The control could not be instantiated. Show the installation prompt
  208.     else 
  209.     {
  210.         slPluginHTML = Silverlight.buildPromptHTML(slPluginHelper);
  211.     }
  212.     // insert or return the HTML
  213.     if(parentElement)
  214.     {
  215.         parentElement.innerHTML = slPluginHTML;
  216.     }
  217.     else
  218.     {
  219.         return slPluginHTML;
  220.     }
  221. }
  222. ///////////////////////////////////////////////////////////////////////////////
  223. //
  224. //  create HTML that instantiates the control
  225. //
  226. ///////////////////////////////////////////////////////////////////////////////
  227. Silverlight.buildHTML = function( slProperties)
  228. {
  229.     var htmlBuilder = [];
  230.     htmlBuilder.push('<object type="application/x-silverlight" data="data:application/x-silverlight,"');
  231.     if ( slProperties.id != null )
  232.     {
  233.         htmlBuilder.push(' id="' + slProperties.id + '"');
  234.     }
  235.     if ( slProperties.width != null )
  236.     {
  237.         htmlBuilder.push(' width="' + slProperties.width+ '"');
  238.     }
  239.     if ( slProperties.height != null )
  240.     {
  241.         htmlBuilder.push(' height="' + slProperties.height + '"');
  242.     }
  243.     htmlBuilder.push(' >');
  244.     
  245.     delete slProperties.id;
  246.     delete slProperties.width;
  247.     delete slProperties.height;
  248.     
  249.     for (var name in slProperties)
  250.     {
  251.         if (slProperties[name])
  252.         {
  253.             htmlBuilder.push('<param name="'+Silverlight.HtmlAttributeEncode(name)+'" value="'+Silverlight.HtmlAttributeEncode(slProperties[name])+'" />');
  254.         }
  255.     }
  256.     htmlBuilder.push('</object>');
  257.     return htmlBuilder.join('');
  258. }
  259. // createObjectEx, takes a single parameter of all createObject parameters enclosed in {}
  260. Silverlight.createObjectEx = function(params)
  261. {
  262.     var parameters = params;
  263.     var html = Silverlight.createObject(parameters.source, parameters.parentElement, parameters.id, parameters.properties, parameters.events, parameters.initParams, parameters.context);
  264.     if (parameters.parentElement == null)
  265.     {
  266.         return html;
  267.     }
  268. }
  269. ///////////////////////////////////////////////////////////////////////////////////////////////
  270. // Builds the HTML to prompt the user to download and install Silverlight
  271. ///////////////////////////////////////////////////////////////////////////////////////////////
  272. Silverlight.buildPromptHTML = function(slPluginHelper)
  273. {
  274.     var slPluginHTML = "";
  275.     var urlRoot = Silverlight.fwlinkRoot;
  276.     var shortVer = slPluginHelper.version ;
  277.     if ( slPluginHelper.alt )
  278.     {
  279.         slPluginHTML = slPluginHelper.alt;
  280.     }
  281.     else
  282.     {
  283.         if (! shortVer )
  284.         {
  285.             shortVer="";
  286.         }
  287.         slPluginHTML = "<a href='javascript:Silverlight.getSilverlight("{1}");' style='text-decoration: none;'><img src='{2}' alt='Get Microsoft Silverlight' style='border-style: none'/></a>";
  288.         slPluginHTML = slPluginHTML.replace('{1}', shortVer );
  289.         slPluginHTML = slPluginHTML.replace('{2}', urlRoot + '108181');
  290.     }
  291.     
  292.     return slPluginHTML;
  293. }
  294. Silverlight.getSilverlight = function(version)
  295. {
  296.     if (Silverlight.onGetSilverlight )
  297.     {
  298.         Silverlight.onGetSilverlight();
  299.     }
  300.     
  301.     var shortVer = "";
  302.     var reqVerArray = String(version).split(".");
  303.     if (reqVerArray.length > 1)
  304.     {
  305.         var majorNum = parseInt(reqVerArray[0] );
  306.         if ( isNaN(majorNum) || majorNum < 2 )
  307.         {
  308.             shortVer = "1.0";
  309.         }
  310.         else
  311.         {
  312.             shortVer = reqVerArray[0]+'.'+reqVerArray[1];
  313.         }
  314.     }
  315.     
  316.     var verArg = "";
  317.     
  318.     if (shortVer.match(/^d+56d+$/) )
  319.     {
  320.         verArg = "&v="+shortVer;
  321.     }
  322.     
  323.     Silverlight.followFWLink("114576" + verArg);
  324. }
  325. ///////////////////////////////////////////////////////////////////////////////////////////////
  326. /// Navigates to a url based on fwlinkid
  327. ///////////////////////////////////////////////////////////////////////////////////////////////
  328. Silverlight.followFWLink = function(linkid)
  329. {
  330.     top.location=Silverlight.fwlinkRoot+String(linkid);
  331. }
  332. ///////////////////////////////////////////////////////////////////////////////////////////////
  333. /// Encodes special characters in input strings as charcodes
  334. ///////////////////////////////////////////////////////////////////////////////////////////////
  335. Silverlight.HtmlAttributeEncode = function( strInput )
  336. {
  337.       var c;
  338.       var retVal = '';
  339.     if(strInput == null)
  340.       {
  341.           return null;
  342.     }
  343.       
  344.       for(var cnt = 0; cnt < strInput.length; cnt++)
  345.       {
  346.             c = strInput.charCodeAt(cnt);
  347.             if (( ( c > 96 ) && ( c < 123 ) ) ||
  348.                   ( ( c > 64 ) && ( c < 91 ) ) ||
  349.                   ( ( c > 43 ) && ( c < 58 ) && (c!=47)) ||
  350.                   ( c == 95 ))
  351.             {
  352.                   retVal = retVal + String.fromCharCode(c);
  353.             }
  354.             else
  355.             {
  356.                   retVal = retVal + '&#' + c + ';';
  357.             }
  358.       }
  359.       
  360.       return retVal;
  361. }
  362. ///////////////////////////////////////////////////////////////////////////////
  363. //
  364. //  Default error handling function to be used when a custom error handler is
  365. //  not present
  366. //
  367. ///////////////////////////////////////////////////////////////////////////////
  368. Silverlight.default_error_handler = function (sender, args)
  369. {
  370.     var iErrorCode;
  371.     var errorType = args.ErrorType;
  372.     iErrorCode = args.ErrorCode;
  373.     var errMsg = "nSilverlight error message     n" ;
  374.     errMsg += "ErrorCode: "+ iErrorCode + "n";
  375.     errMsg += "ErrorType: " + errorType + "       n";
  376.     errMsg += "Message: " + args.ErrorMessage + "     n";
  377.     if (errorType == "ParserError")
  378.     {
  379.         errMsg += "XamlFile: " + args.xamlFile + "     n";
  380.         errMsg += "Line: " + args.lineNumber + "     n";
  381.         errMsg += "Position: " + args.charPosition + "     n";
  382.     }
  383.     else if (errorType == "RuntimeError")
  384.     {
  385.         if (args.lineNumber != 0)
  386.         {
  387.             errMsg += "Line: " + args.lineNumber + "     n";
  388.             errMsg += "Position: " +  args.charPosition + "     n";
  389.         }
  390.         errMsg += "MethodName: " + args.methodName + "     n";
  391.     }
  392.     alert (errMsg);
  393. }
  394. ///////////////////////////////////////////////////////////////////////////////////////////////
  395. /// Releases event handler resources when the page is unloaded
  396. ///////////////////////////////////////////////////////////////////////////////////////////////
  397. Silverlight.__cleanup = function ()
  398. {
  399.     for (var i = Silverlight._silverlightCount - 1; i >= 0; i--) {
  400.         window['__slEvent' + i] = null;
  401.     }
  402.     Silverlight._silverlightCount = 0;
  403.     if (window.removeEventListener) { 
  404.        window.removeEventListener('unload', Silverlight.__cleanup , false);
  405.     }
  406.     else { 
  407.         window.detachEvent('onunload', Silverlight.__cleanup );
  408.     }
  409. }
  410. ///////////////////////////////////////////////////////////////////////////////////////////////
  411. /// Releases event handler resources when the page is unloaded
  412. ///////////////////////////////////////////////////////////////////////////////////////////////
  413. Silverlight.__getHandlerName = function (handler)
  414. {
  415.     var handlerName = "";
  416.     if ( typeof handler == "string")
  417.     {
  418.         handlerName = handler;
  419.     }
  420.     else if ( typeof handler == "function" )
  421.     {
  422.         if (Silverlight._silverlightCount == 0)
  423.         {
  424.             if (window.addEventListener) 
  425.             {
  426.                 window.addEventListener('onunload', Silverlight.__cleanup , false);
  427.             }
  428.             else 
  429.             {
  430.                 window.attachEvent('onunload', Silverlight.__cleanup );
  431.             }
  432.         }
  433.         var count = Silverlight._silverlightCount++;
  434.         handlerName = "__slEvent"+count;
  435.         
  436.         window[handlerName]=handler;
  437.     }
  438.     else
  439.     {
  440.         handlerName = null;
  441.     }
  442.     return handlerName;
  443. }