2009-06-26 41 views
7

我试图加我的Silverlight应用程序上一个子域住到网页中的另一个子域。出于某种原因,这只是普通的不能正常工作......我的Silverlight应用程序加载为这样的一个页面上http://subA.domain.com/somepage.html如何通过域访问Silverlight XAP文件?

<div id="silverlightControlHost"> 
    <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" 
     width="800px" height="600px"> 
     <param name="source" value="http://subB.domain.com/SilverlightApp.xap" /> 
     <param name="onerror" value="onSilverlightError" /> 
     <param name="background" value="white" /> 
     <param name="minRuntimeVersion" value="2.0.31005.0" /> 
     <param name="autoUpgrade" value="true" /> 
     <param name="enableHtmlAccess" value="true" /> 
     <a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;"> 
      <img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" 
       style="border-style: none" /> 
     </a> 
    </object> 
    <iframe style='visibility: hidden; height: 0; width: 0; border: 0px'></iframe> 
</div> 

如果我提出SilverlightApp.xap到subA.domain.com,它加载完美。需要哪些步骤来跨域访问XAP文件?我一直在试图弄清楚这个网络,似乎没有任何进展。

谢谢!

回答

2

当Silverlight请求跨域的.XAP文件时,内容类型必须为:application/x-silverlight-app。另外,您需要在其他域上使用跨域策略文件。 GL

0

您可以创建一个简单的HTML文件旁边包含Silverlight对象的.xap文件,并从一个iframe访问此。例如,http://silverlight.live.com/解决了这个问题。

在你subA.domain.com主页添加的iframe,显示在其他域中的html页面:

<iframe src="http://subB.domain.com/SilverlightApp.html" 
     scrolling="no" 
     frameborder="0" 
     style="width:800px;height:600px"> 
</iframe> 

和SilverlightApp.html上subBdomain.com可能类似于:

<html> 
    <body> 
    <div id="silverlightControlHost">  
     <object data="data:application/x-silverlight-2," 
       type="application/x-silverlight-2"   
       width="800px" height="600px">   
     <param name="source" value="http://subB.domain.com/SilverlightApp.xap" /> 
     <param name="onerror" value="onSilverlightError" /> 
     <param name="background" value="white" /> 
     <param name="minRuntimeVersion" value="2.0.31005.0" /> 
     <param name="autoUpgrade" value="true" /> 
     <param name="enableHtmlAccess" value="true" /> 
     <a href="http://go.microsoft.com/fwlink/?LinkID=124807" 
      style="text-decoration: none;">    
      <img src="http://go.microsoft.com/fwlink/?LinkId=108181" 
       alt="Get Microsoft Silverlight" 
       style="border-style: none" /> 
     </a> 
     </object> 
     <iframe style='visibility: hidden; height: 0; width: 0; border: 0px'> 
     </iframe> 
    </div> 
    </body> 
</html> 
5

为了帮助其他人谁都有同样的问题,而不想使用iframe,请参阅本link,因为它解决了我的问题。尽管作者指的是Silverlight 2,但它解决了我在Silverlight 3中的问题。如果链接出现故障,我需要做两件事:

- 在Silverlight应用程序中,编辑AppManifest。 XML以添加以下内容:

<Deployment xmlns="http://schemas.microsoft.com/client/2007/deployment" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
ExternalCallersFromCrossDomain="ScriptableOnly"> 

- 如果你在你的Silverlight应用程序中使用HtmlPage(如当读取查询字符串传递给托管页),还必须添加:

<param name="enableHtmlAccess" value="true" /> 

到托管页面中的silverlight对象。

请注意,有安全隐患的上方,我不禁想,这就是为什么微软不出去自己的方式来传播这一信息。但在我的情况下,我没有可脚本化的silverlight元素,而且自从我编写silverlight应用程序以来,托管页面没有问题,允许Silverlight应用程序访问它。

虽然研究这个问题,我注意到了这个问题,并相应的解决方案被用一个单独的问题,一个Silverlight XAP访问跨域边界WCF服务的问题感到困惑。该问题确实需要位于托管wcf服务的网站根目录上的clientaccesspolicy.xml文件。

所以可能有一日网站上第二个网站,其中访问数据服务在第三现场,提供最大的灵活性和再利用访问XAP文件。

相关问题