【发布时间】: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