跨域引用Silverlight相关问题解疑

开发 开发工具
跨域引用Silverlight在实际应用中会出现异常,通常表现为不能展现出已下载的Xap包中的内容。在这里将会针对这一问题给出相应的应对措施。

Silverlight开发工具的应用领域比较广发。不过即使是这样一款功能强大的工具,在使用的时候同样也会造成一些问题的产生。比如跨域引用Silverlight时,就会出现一些令人头疼的问题。跨域引用Silverlight,即将Silverlight包部署在A域下,却由在B域下的网站引用。其中Silverlight通过HTML.Window调用了脚本方法。#t#

示例代码

 

  1. public partial class Page : 
    UserControl  
  2. {  
  3. public Page()  
  4. {  
  5. InitializeComponent();  
  6. }  
  7. private void Button_Click
    (object sender, RoutedEventArgs e)  
  8. {  
  9. HtmlPage.Window.Alert("hi");  
  10. }  

跨域引用Silverlight异常描述

进入B域页面,没有看到Silverlight展现,右键点击相应区域,显示“Silvelight”,说明Silverlight区域已经被渲染出来。通过HTTP Watch查看,发现Xap包已经被请求并下载下来,但就是没有展现。

Silverlight正常显示,但点击按钮后,并不弹出对话框。调试发现,在HtmlPage.Window.Alert("hi");抛出异常,异常信息为“已禁用DOM/脚本桥”。

跨域引用Silverlight问题解决

加载却不展示,是由于在A网站下没有给Silverlight配置正确的MIME类型。当引用不同域下的Silverlight包,Silverlight Runtime会检测XAP的HTTP头中的MIME类型。正确的类型是“application/x-silverlight-app”,如果配为“application/x-silverlight-2”(这似乎是旧版本的MIME配置),同样不能正常显示。IIS7由于默认带有Xap的MIME类型配置,所以不会出现此类问题。

不能正常弹出Alert对话框,但如果改成MessageBox.Show("Click");却可以正常运行。这是因为需要配置Silverlight以及Host Silverlight的页面的几个参数,使得Silverlight中的ManagedCode和页面中的Javascript和DOM code可以交互。而在同域下,这几个参数或者是默认配置好的,或者就是干脆无效,所以不需要配置。具体可参考(Security Settings in HTML Bridge),具体到这里的情况,就是要在页面中配置enableHtmlAccess属性,使在Silverlight的Manage code里可以操纵外部Dom对象。

Asp.net页面:

  1. < asp:Silverlight ID="Xaml1" HtmlAccess="Enabled" 
    runat="server"Source=http://localhost:2300/
    ClientBin/SilverlightApplication.xap 
    MinimumVersion="2.0.31005.0" Width="100%" 
    Height="100%" />HTML页面: 
  2. < object data="data:application/x-silverlight-2," 
    type="application/x-silverlight-2" 
    width="80%" height="80%" > 
  3. < param name="enableHtmlAccess" value="true" /> 
  4. < param name="source" value="http://
    localhost:2300/ClientBin/Silverlight
    Application.xap"
    /> 
  5. < param name="onerror" value="onSilverlightError" /> 
  6. < param name="background" value="white" /> 
  7. < param name="minRuntimeVersion" 
    value="2.0.31005.0" /> 
  8. < param name="autoUpgrade" value="true" /> 
  9. < a href="http://go.microsoft.com/
    fwlink/?LinkID=124807"
     style="text-
    decoration: none;"
    > 
  10. < img src="http://go.microsoft.com/
    fwlink/?LinkId=108181"
     alt="Get Microsoft 
    Silverlight"
     style="border-style: none"/> 
  11. < /a> 
  12. < /object> 

以上就是我们为大家带来的跨域引用Silverlight相关问题解决办法。

责任编辑:曹凯 来源: 博客园
相关推荐

2009-12-31 15:28:02

Silverlight

2010-01-04 15:27:45

Silverlight

2010-02-05 16:07:52

C++多态覆盖

2010-01-04 16:23:42

Silverlight

2010-02-24 10:55:01

WCF跨域访问

2009-12-21 10:19:05

Silverlight

2010-01-20 14:52:21

VB.NET修改数据窗

2009-12-07 10:05:22

PHP session

2010-02-22 17:29:47

WCF跨域

2009-02-04 18:20:42

服务器虚拟化VMware

2010-03-15 17:17:29

Java线程池

2010-02-02 13:20:33

C++对象传递

2010-07-30 12:40:00

Flex跨域访问

2009-12-22 11:21:43

WCF跨域访问

2009-12-02 19:14:07

PHP header

2017-08-20 12:49:59

2009-12-31 15:08:22

Silverlight

2009-12-01 15:41:16

PHP substr截

2021-06-06 13:05:15

前端跨域CORS

2010-07-30 12:48:13

Flex跨域调用
点赞
收藏

51CTO技术栈公众号