HtmlPage.Window.Navigate在调试中工作,但在部署时不工作

时间:2010-11-04 20:53:18

标签: javascript asp.net-mvc silverlight-4.0 iis-6 c#-4.0

我正在创建一个使用<Button>代码的Silverlight应用程序,并在HtmlPage.Window.Navigate(new Uri("http://www.google.com"));事件期间调用Click

在调试中,这很好用。我可以单击按钮并重定向到请求的位置。将此发布到服务器时,请求的操作无法执行。

我还尝试了其他变体,例如通过HtmlPage.Window.Invoke()调用JavaScript或只使用HtmlPage.Document.Submit()简单刷新页面,但是一旦推送到服务器就无法工作。

我在这一点上很难过。文件运行的两个位置之间唯一真正的区别是:

  • Silverlight应用程序包含在MVC页面中,而不是自动生成的测试页面
  • 它也位于服务器的另一个端口 - 我为.NET 4测试预留了一个端口。 MVC页面打开:80,Silverlight应用程序打开:81

似乎任何时候Silverlight应用程序尝试在JavaScript级别上与MVC页面交互,它都会失败(当然,不会引发任何可见错误)。我之所以认为这是因为,当我写这篇文章时,我试图通过Silverlight中的MessageBox.Show()命令弹出一个消息框 - 它没有出现。

我可以尝试其他任何想法吗?

1 个答案:

答案 0 :(得分:2)

端口81上的XAP和您的JavaScript在端口80上的事实使这成为跨域调用。默认情况下,Silverlight不允许跨域JavaScript交互。

对于这种情况,请查看security settings

我认为在您的情况下,有必要使用enableHtmlAccess启用跨域HTML访问,如下所示:

<div id="silverlightControlHost">
    <object data="data:application/x-silverlight-2,"
            type="application/x-silverlight-2"
            width="300" height="100">
        <param name="source"
                 value="http://www.northwindtraders.com/MySample.xap"/>
        <param name="enableHtmlAccess" value="true" />
    </object>
</div>