【问题标题】:Cross-domain scriptable Silverlight application跨域可编写脚本的 Silverlight 应用程序
【发布时间】:2011-05-02 11:20:23
【问题描述】:

我在使用 Silverlight 进行跨域应用程序托管时遇到问题。

我有一个托管在不同域上的应用程序,并包含在页面的以下 HTML 代码中:

<script type="text/javascript">
function succ( sender, args ) {
    console.log("SUCCESS");
    console.log(sender);
    console.log(args);
}
function err( sender, args ) {
    console.log("FAILURE");
    console.log(sender);
    console.log(args);
}
</script>
<object width="400" height="20" id="app" type="application/x-silverlight-2" data="data:application/x-silverlight-2,">
    <param name="minruntimeversion" value="4.0.41108.0"/>
    <param name="autoupgrade" value="false"/>
    <param name="onerror" value="err"/>
    <param name="onload" value="succ"/>
    <param name="enablehtmlaccess" value="true"/>
    <param name="source" value="http://example.com/app.xap"/>
</object>

但是,如果 app.xap 应用程序托管在与此 HTML 代码不同的域中,则 onLoad succ 函数会在不带参数的情况下调用,因此它会记录以下行:

SUCCESS
undefined
undefined

如果我托管在同一个域上,它会记录正确的行:

SUCCESS
UserControl {}
undefined

所以在第一种情况下,我无法从 javascript 访问 [ScriptableMember] 带注释的方法,因为我没有对应用程序的任何引用。

AppManifest.xml 文件中,我包含HtmlPage.RegisterScriptableObject 方法所需的属性,如下所示:

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

xap 文件是用application/x-silverlight-app Content-Type 传输的,所以这也不是问题。

我错过了什么?

谢谢!

【问题讨论】:

    标签: javascript silverlight browser silverlight-4.0 cross-domain


    【解决方案1】:

    假设您已经注册了一个名为“Thingy”的外部对象。

    您应该能够通过 html 对象元素的Content 属性访问它。在对象标签上放置一个id="mySL"。现在试试这个代码:-

    function succ( sender, args ) { 
        console.log("SUCCESS"); 
        console.log(document.getElementById("mySL").Content.Thingy); 
        console.log(args); 
    } 
    

    请务必尽早在代码中注册“Thingy”,就像在用作根视觉对象的类的构造函数中一样。

    【讨论】:

    • 谢谢你的回复,我明天试试,因为我这里没有我的虚拟机。
    • 我修改了silverlight应用的源码和成功方法,但是还是不行。 :(
    • 哦,它可以工作,我必须将所有可编写脚本的代码放到我的根可视化类中(我不知道为什么)。
    【解决方案2】:

    同样的问题,并按照他的评论中描述的主题开始解决

    我必须将所有可编写脚本的代码放到我的根可视化类中

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-08
      • 2016-09-08
      • 2011-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多