【问题标题】:How do I access a Silverlight XAP file across a domain?如何跨域访问 Silverlight XAP 文件?
【发布时间】:2010-03-26 22:46:17
【问题描述】:

我正在尝试将位于一个子域中的 Silverlight 应用程序添加到另一个子域中的网页。出于某种原因,这根本不起作用……我的 Silverlight 应用程序在http://subA.domain.com/somepage.html 的页面中加载:

<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 文件需要哪些步骤?我一直在上网试图弄清楚这一点,但似乎一无所获。

谢谢!!

【问题讨论】:

    标签: silverlight cross-domain


    【解决方案1】:

    为了帮助遇到同样问题但不想使用 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(例如在读取传递给托管页面的 QueryString 时),您还必须添加:

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

    到宿主页面中的 silverlight 对象。

    请注意,上述内容存在安全隐患,我不禁想到这就是微软不竭尽全力传播这些信息的原因。但是,在我的情况下,我没有可编写脚本的 silverlight 元素,并且由于我编写了 silverlight 应用程序,因此允许 silverlight 应用程序访问它的托管页面没有问题。

    在研究这个问题时,我注意到这个问题和相应的解决方案与一个单独的问题相混淆,即 silverlight xap 跨域访问 wcf 服务的问题。该问题确实需要位于托管 wcf 服务的网站根目录中的 clientaccesspolicy.xml 文件。

    因此,可以让第一个站点访问第二个站点上的 xap 文件,该文件访问第三个站点上的数据服务,以获得最大的灵活性和重用性。

    【讨论】:

      【解决方案2】:

      当 Silverlight 跨域请求 .XAP 文件时,内容类型必须是:application/x-silverlight-app。此外,您还需要另一个域上的跨域策略文件。 GL

      【讨论】:

        【解决方案3】:

        您可以在包含 silverlight 对象的 .xap 旁边创建一个简单的 html 文件,然后从 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>
        

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

        <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>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-25
          • 2010-10-30
          • 2014-03-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多