默认情况下,生成的页面代码可能与下面的代码类似: 
复制代码 代码如下:
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" > 
<head> 
<title>IRERTranscript</title> 
<style type="text/css"> 
html, body { 
height: 100%; 
overflow: auto; 
} 
body { 
padding: 0; 
margin: 0; 
} 
#silverlightControlHost { 
height: 100%; 
text-align:center; 
} 
</style> 
<script type="text/javascript" src="https://www.jb51.net/Silverlight.js"></script> 
<script type="text/javascript"> 
function onSilverlightError(sender, args) { 
var appSource = ""; 
if (sender != null && sender != 0) { 
appSource = sender.getHost().Source; 
} 
var errorType = args.ErrorType; 
var iErrorCode = args.ErrorCode; 
if (errorType == "ImageError" || errorType == "MediaError") { 
return; 
} 
var errMsg = "Unhandled Error in Silverlight Application " + appSource + "\n" ; 
errMsg += "Code: "+ iErrorCode + " \n"; 
errMsg += "Category: " + errorType + " \n"; 
errMsg += "Message: " + args.ErrorMessage + " \n"; 
if (errorType == "ParserError") { 
errMsg += "File: " + 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"; 
} 
throw new Error(errMsg); 
} 
</script> 
</head> 
<body> 
<form runat="server"> 
<div> 
<object data="data:application/x-silverlight-2," type="application/x-silverlight-2"> 
<param value="ClientBin/example.xap"/> 
<param value="onSilverlightError" /> 
<param value="white" /> 
<param value="4.0.50401.0" /> 
<param value="true" /> 
<a href="https://go.microsoft.com/fwlink/?LinkID=149156&v=4.0.50401.0"> 
<img src="https://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight"/> 
</a> 
</object><iframe></iframe></div> 
</form> 
</body> 
</html> 
我们可以给object对象传递不同的参数,如xap包的加载地址,onLoad或onError事件句柄,背景色,最小版本号支持等等,完整的参数信息读者可以参考Silverlight 3中param参数列表汇总。object对象中一般会包含一段<a>标记,是用来显示当客户端浏览器未安装Silverlight插件时要显示的内容的,我们可以自定义其中的内容,如:
复制代码 代码如下:
 
<object data="data:application/x-silverlight-2," type="application/x-silverlight-2"> 
<param value="ClientBin/example.xap"/> 
<param value="onSilverlightError" /> 
<param value="white" /> 
<param value="4.0.50401.0" /> 
<param value="true" /> 
<img src="https://www.jb51.net/images/NonSilverlight.jpg" usemap="#NonSilverlight" /> 
<map> 
<area shape="RECT" coords="154,87,362,183" title="Get Microsoft Silverlight" href="https://www.microsoft.com/silverlight/resources/install.aspx" target="_blank" /> 
</map> 
</object> 
当客户端浏览器未安装Silverlight插件时,程序会在相应的区域显示一张带有热区的图片,热区指向的位置是Microsoft提供的Silverlight安装地址。理论上,你可以指定任何的自定义代码来显示nonSilverlight的效果,但是Silverlight默认没有提供低版本Silverlight情况下要显示的效果,也就是lowSilverlight的情况。
Silverlight可以自动实现向前兼容,也就是在低版本下编译的Silverlight包可以在高版本下运行,相反,在高版本下编译的Silverlight包不能再低版本下运行,此时Silverlight插件会显示一张默认的图片用来告知用户升级插件,并弹出一个提示框,如下图:
个人觉得这种用户体验并非很好,试想,如果当前页面上有多个Silverlight插件,岂不是要弹出多个提示框吗?那么如何来解决这个问题呢?事实上,我们除了直接在页面上添加object标记来呈现Silverlight外,还可以通过javascript脚本来动态添加Silverlight。Silverlight.js脚本为我们提供了一系列可用的方法,详细内容大家可以参考下msdn
以及如何通过脚本在页面上添加Silverlight,(v=VS.95).aspx

