天天看点

Silverlight:分包下载及SEO优化方案

一般大型的Silverlight应用,都会按模块分解成多个silverlight project,编译后就有多个xap包,然后在需要用到的场景按需加载。我近期开发的这个项目不需要全站Silverlight,而是aspx混合silverlight,说得更白点,就是把相应的子模块xap包嵌入aspx.

这样分包就简单多了:直接用js控制dom元素,修改object元素中的source,动态设置成不同的xap即可实现无刷新的加载不同模块。(这比网上主流的方式:用WebClient动态下载xap包,最终再反射加载,个人觉得更简单。当然,这种方式不适用于整站Silverlight的项目)

上面讨论的办法,只是解决了按需加载不同的xap文件,但是如果一个xap中有多个页面,如何确定加载某个xap后,显示其中的哪个页面呢?

答案:参数传入+反射

silvelright以object标签嵌入html时,可以指定一些传入参数,类似下面这样:

注意其中的<param name="initParams" value="page=Basic.City"/>这表明我们想让City页面在加载成功后显示。

那么,SL中如何接受这个参数呢?看下面的代码:

这是RIA应用经常会遇到的一个问题,前面提到的处理方法并未涉及这一块,默认情况下:xap模块的动态加载,以及根据参数动态反射加载不同页面,都不会改变浏览器的地址,所以搜索引擎会始终认为这是一个页面,最终也只能收录一个网址。

为了对搜索引擎更友好,可以在地址栏的#部分做些手脚,最终要到达的效果:

这样,虽然都是同一个default.aspx页面,但是搜索引擎却认为这是二个不同的url,会搜录二个地址。

default.aspx完整代码如下:

继续阅读