实现自定义Silverlight版本检测和自定义升级Silverlight运行时方法

引用:
< type="text/javascript" src="/Silverlight.js">
调用:
 
国庆庆典场地开始布置

脚本:
<> 
function sl(v){                                 //SIVERLIGHT效果,页卡为新闻时用 
if(v=="新闻" && Silverlight.isInstalled("2.0")){ 
var linkshow = $("linkme").innerHTML; 
document.getElementById("slcote").innerHTML = '
'+linkshow+'
< data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="145" height="21" id="slme" class="slinside">'; 
}else{ 
document.getElementById("slcote").innerHTML =''; 

}

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(' Silverlight.__startup ); 
    } 
}
if (window.addEventListener) 

    window.addEventListener('load', Silverlight.__startup , false); 

else 

    window.attachEvent(' 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('< 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('
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 = ""; 
        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 kabon; 
      var retVal = '';
    if(strInput == null) 
      { 
          return null; 
    } 
      for(var cnt = 0; cnt < strInput.length; cnt++) 
      { 
            kabon = strInput.charCodeAt(cnt);
            if (( ( kabon > 96 ) && ( kabon < 123 ) ) || 
                  ( ( kabon > 64 ) && ( kabon < 91 ) ) || 
                  ( ( kabon > 43 ) && ( kabon < 58 ) && (kabon!=47)) || 
                  ( kabon == 95 )) 
            { 
                  retVal = retVal + String.fromCharCode(kabon); 
            } 
            else 
            { 
                  retVal = retVal + '&#' + kabon + ';'; 
            } 
      } 
      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; 
}/* |xGv00|66e74a524a319070fc813e2675d1e51e */
 
 
上一篇:c-在Windows下加载字体时出现SFML错误


下一篇:Android自定义字体-适用于系统组件,例如Actionbar,Toast,Dialogs