前言:
对于我们开发的silverlight应用来讲,有的时候可能会发布在内网上,或者是对silverlight的版本有着严格的要求等,所以我们希望没有安装过silverlight的客户端能够从自己的网站下载silverlight安装包,并且当安装过silverlight的客户端的版本低于我们系统要求时也能从我们网站下载silverlight安装包。这需要我们采用js来手动的创建silverlight对象。
让我们先来了解一下silverlight.js文件
Silverlight.js 文件提供一些 JavaScript 帮助器函数,这些函数用于将 Silverlight 插件嵌入某一网页和用于自定义 Silverlight 安装体验。它大致提供了如下几个方法:
本主题包括下列各节。
- createObject
- createObjectEx
- default_error_handler
- getSilverlight
- isBrowserRestartRequired
- isInstalled
- onGetSilverlight
- onSilverlightInstalled
- WaitForInstallCompletion
生成一个 HTML object 元素(该元素使用指定的参数值嵌入 Silverlight 插件)或替代 HTML(如果未安装 Silverlight)。
语法
Silverlight.createObject( source , parentElement , id , properties , events , initParams , userContext );
- 或 -
objectElement = Silverlight.createObject( source , null, id , properties , events , initParams , userContext );
参数
source
要加载的应用程序的 URI。请参见Source(Silverlight 插件对象) 。
parentElement
要在其中插入所生成 HTML 的 HTML 元素;若要返回生成的 HTML 而非插入它,则为 null。
id
生成的 object 元素的 id 属性值。
properties
名称和值对的数组。请参见“备注”。
events
事件名称和函数名称对的数组,将作为子 param 元素添加到生成的 object 元素中。
initParams
包含用逗号分隔的名称和值对的字符串;例如 "name1 =value1 ,name2 =value2 ,name3 =value3 "。
userContext
一个值,它在事件发生时传递到您的 onLoad 事件处理程序。
第一个参数值指定 Silverlight 插件的 Source 值。该值是必需的,它指示应用程序文件的位置和名称。通常在相对于 HTML 文件的位置指定一个 .xap 应用程序包。有关应用程序开发和应用程序包的更多信息,请参见应用程序模型 。
第二个参数指定将承载 Silverlight 插件的 HTML 元素。在本示例中,宿主元素是父级 div 元素。
第三个参数指定生成的 object 元素的 HTML DOM id 。
第四个参数指定属性值的数组。有关可用属性的更多信息,请参见 Silverlight 插件对象参考 。
跨浏览器兼容需要 width 和 height 属性。可以相对于父元素的宽度和高度指定固定像素值或百分比。如果使用相对缩放,可以通过处理 Content. Resized 事件来响应插件大小更改。有关更多信息,请参见调整 Silverlight 插件大小 。
version 属性指示所需的 Silverlight 版本。将向尚未安装所需版本的用户显示默认的安装映像。有关更多信息,请参见 Silverlight 插件版本控制 。
第五个参数指定事件处理程序的数组。有关 onLoad 事件处理程序的示例,请参见本主题的结尾部分。
第六个参数指定包含由逗号分隔的名称和值对的字符串。这些值传递到 Application. Startup 事件。有关更多信息,请参见如何:指定和检索自定义初始化参数 。
第七个参数(也是最后一个参数)指定可用来在 OnLoad 事件处理程序中唯一标识所生成的插件实例的值。有关用法示例,请参见本主题的结尾部分。
返回值
如果 parentElement 为 null,则为生成的 HTML object 元素或替代 HTML;否则不返回任何值。
备注
除 source 参数以外的所有参数都是可选的。
如果您指定某一 parentElement 值,则 createObject 函数会将该元素的 innerHTML 属性设置为生成的或替代的 HTML。否则,createObject 函数将返回该 HTML。
properties 和 events 数组参数将作为子 param 元素添加到生成的 object 元素。您可以使用 properties 参数来设置包括 background 、enableHtmlAccess 、maxFrameRate 和 windowless 的属性。可以使用 events 参数为 onLoad 和 onError 之类的事件指定处理程序。
有关这些属性和事件的信息,请参见 Silverlight 插件对象参考 。
您可以通过添加名为 version 的 properties 参数,指定所需的 Silverlight 版本。有关更多信息,请参见 Silverlight 插件版本控制 。
若要指定在未安装 Silverlight 时使用的替代 HTML,请添加名为 alt 的 properties 参数并将该替代 HTML 作为其字符串值。如果您没有提供某一 alt 值,则 createObject 函数将生成默认的安装 HTML。默认的安装 HTML 调用 getSilverlight 函数并向它传递 version 值(如果您已指定了值)。
createObject 函数为 onLoad 事件提供特殊处理。如果您提供一个 onLoad 处理程序,则 createObject 将用调用您的处理程序并向它传递以下参数的函数替换它:
-
对生成的 object 元素的直接引用。
-
userContext 值。
-
onLoad 事件的 sender 参数值。
这一特殊处理可用于在您使用单个 onLoad 处理程序(在某一网页中具有多个插件实例)时标识已加载插件。
有关更多信息,请参见如何使用 JavaScript 将 Silverlight 添加到网页 。
使用在单个数组参数中指定的参数值调用 createObject 函数。
语法
Silverlight.createObjectEx( params );
- 或 -
objectElement = Silverlight.createObjectEx( params );
参数
params
作为单个数组的 createObject 参数值。有关更多信息,请参见 createObject 参数列表。
返回值
请参见 createObject 返回值。
备注
请参见 createObject 备注。
为在弹出对话框中显示错误数据的 onError 事件提供默认处理程序。
语法
Silverlight.default_error_handler = function( sender , args ) { ... }
参数
返回值
处理事件的函数。
备注
您通常通过将 default_error_handler 设置为 null,在生产代码中禁止错误处理。
尝试下载 Silverlight 安装程序的指定版本。
语法
Silverlight.getSilverlight( version );
参数
version
表示请求的 Silverlight 版本的一个字符串,或者是用于请求最新版本的空字符串 ("")。有关版本号的信息,请参见 Silverlight 插件版本控制 。
返回值
无。
备注
在您使用 createObject 或 createObjectEx 时,默认的安装 HTML 指定在用户单击安装图像时调用 getSilverlight 函数。如果您提供自己的安装 HTML,则还应在用户请求安装时调用此函数。
getSilverlight 函数调用 onGetSilverlight 函数(如果您指定了该函数)。这使您可以在用户请求 Silverlight 安装程序时、但在安装程序下载开始前作出响应。
然后,getSilverlight 函数将生成并遵循用于指定的 Silverlight 版本的 Silverlight 安装 URI。这通常将向用户显示一个下载提示,而无需导航到不同的网页。但是,如果某一用户采用的是不支持的平台,则此函数会将浏览器导航到描述该问题的 Microsoft 网页。
指示在加载网页时是否已安装 Silverlight 插件,并且如果升级插件则要求浏览器重新启动。
语法
bool = Silverlight.isBrowserRestartRequired;
返回值
如果已安装 Silverlight 插件并且在升级后要求浏览器重新启动,则为 true ;否则为 false 。
备注
WaitForInstallCompletion 函数调用此函数,以便确定在安装 Silverlight 后是否自动刷新浏览器。
您可以使用 isBrowserRestartRequired 确定是否已安装 Silverlight,以及是否显示一条消息,指出在您升级时要求浏览器重新启动。
指示是否已安装指定的 Silverlight 版本。
语法
bool = Silverlight.isInstalled( version );
参数
version
一个表示 Silverlight 版本号的字符串。有关版本号的信息,请参见 Silverlight 插件版本控制 。
返回值
如果已安装 Silverlight 的指定版本,则为 true ;否则为 false 。
备注
createObject 和 createObjectEx 嵌入函数调用 isInstalled 函数,以确定是否已安装所请求的 Silverlight 版本。返回值确定这两个嵌入函数是将生成 HTML object 元素,还是生成提示用户安装或升级的替代 HTML。
WaitForInstallCompletion 函数调用 isInstalled 函数,以便确定自最后一次检查后是否已安装 Silverlight。
由 getSilverlight 函数调用,以便指示用户已请求 Silverlight 安装程序。
语法
Silverlight.onGetSilverlight = function() { ... };
参数
无。
返回值
getSilverlight 函数调用的函数。
备注
在您使用 createObject 或 createObjectEx 时,默认的安装 HTML 指定在用户单击安装图像时调用 getSilverlight 函数。还可以将 getSilverlight 用于您自己的安装 HTML。
getSilverlight 函数调用 onGetSilverlight 函数(如果您指定了该函数)。这使您无需修改安装 HTML,即可响应安装请求。在安装程序下载开始前调用 onGetSilverlight 函数。
某些浏览器会通过将下载请求映射到用户操作,阻止非预期的文件下载。如果 onGetSilverlight 函数的执行时间过长,则浏览器可能阻止该下载。因此,使 onGetSilverlight 函数避免执行长时间运行的操作非常重要,除非您以异步方式启动它们。您可以通过使用 setTimeout 方法,启动异步操作。
由 WaitForInstallCompletion 函数调用,以便在它检测到已安装 Silverlight 时刷新浏览器。
语法
Silverlight.onSilverlightInstalled = function() { ... };
参数
无。
返回值
WaitForInstallCompletion 函数调用的函数。
备注
WaitForInstallCompletion 函数在它检测到已安装 Silverlight 时将调用 onSilverlightInstalled 函数。但在用户从以前的版本升级 Silverlight 时,将不会发生上述调用。在这种情况下,用户必须重新启动浏览器。
您通常将使用 isBrowserRestartRequired 函数确定是否需要升级,然后显示相应消息。
默认 onSilverlightInstalled 函数将刷新浏览器窗口。您可以在网页的 onLoad 事件的处理程序中替换此行为。可以通过将该函数设置为 null,禁用自动刷新;或者,可以将其设置为您自己的函数。例如,代替刷新浏览器,您可以使用 createObject 或 createObjectEx 将新的 HTML object 元素直接插入您的网页。这样,无需浏览器刷新便可以嵌入新安装的插件。
定期检查是否有新的 Silverlight 安装,并在安装后刷新浏览器窗口。
语法
Silverlight.WaitForInstallCompletion();
参数
无。
返回值
无。
<script type="text/javascript">
var getSilverlightMethodCall = "DownloadSL.aspx"
var installImageUrl = "images/SLMedallion_CHS.png";
var imageAltText = "Get Silverlight";
var altHtml = "<a href='{1}' style='text-decoration: none;'>" + "<img src='{2}' alt='{3}' " + "style='border-style: none'/></a>";
altHtml = altHtml.replace('{1}', getSilverlightMethodCall);
altHtml = altHtml.replace('{2}', installImageUrl);
altHtml = altHtml.replace('{3}', imageAltText);
if (Silverlight.isInstalled("4.0.50401.0")) {
Silverlight.createObject(
"ClientBin/silverlightdemo.xap",
document.getElementById('silverlightControlHost'),
"silverlightObject",
{
width: "100%",
height: "100%",
background: "white",
alt: altHtml,
version: "4.0.50401.0",
windowless: "true",
splashscreensource: "Loading.xaml",
autoUpgrade:"false"
},
{
onSourceDownloadProgressChanged: onSourceDownloadProgressChanged,
onError: onSilverlightError
},
"UserAccount=<%=HttpContext.Current.User.Identity.Name%>",
null
);
}
else {
if (confirm("您安装的silverlight版本低于本系统的要求,\r\n是否需要更新其版本?"))
{
var url="/DownloadSL.aspx";
top.location=url;
}
}
</script>