我在使用集成点,SQL报告服务和一堆使用ASP.NET MVC构建的自定义表单的应用程序时遇到了一些问题。
假设我的服务器如下;
在MOSS中,我的门户网站需要在弹出自定义表单以捕获用户输入。我通过使用jQuery对话框(使用Boxy)来完成此操作,该对话框将自定义窗体iframe并将门户网站的url传入其中。完成自定义表单后,它会将父窗口(MOSS门户)导航到传入的URL,从而有效刷新页面。
直到我们考虑到SSRS的复杂性,这才得以正常工作。
现在在MOSS中,我有一个列出一些数据的报告,但是SSRS报告查看器Web部件似乎是iframe的报告内容,这意味着来自报告的超链接不能要求父级覆盖相同的对话框(因为它是跨域的,如果要执行叠加本身,它只会覆盖iframe。
对于这篇长篇文章感到抱歉,重点关注 - 这只是一个内部Intranet应用程序。是否有可能以某种方式允许跨域脚本,以便可以从sharepoint门户和SSRS中的javascript控制所有弹出对话框,我的自定义表单只能在父级上调用javascript方法?
最好我不想在客户端浏览器中进行配置以允许这种情况发生,因为我必须将更改推送到庄园内的所有机器 - 这是一个重要的数字。
提前致谢,任何可以解决我的困境的人都可以获得啤酒;)
干杯, 贝
答案 0 :(得分:4)
IE8,Firefox 3,最近的Opera和Safari / Chrome支持postMessage,它允许不同域上的合作页面相互通信:
http://ajaxian.com/archives/cross-window-messaging-with-html-5-postmessage
如果您遇到旧浏览器,则几乎没有选择。最干净的是通过相同的代理发送需要相互通信的所有内容,尽管在OP的情况下看起来这是不可能的。
下一个最干净的是使用Flash的跨域设施。
另一个选项是xssinterface,它将postMessage包装在可用的地方,并使用一些涉及cookie的voodoo和不在的地方进行轮询。
唯一的另一个选择是使用隐藏的iframe - 向页面发送消息,将iframe的位置更改为目标网页域上的位置并在目标页面中进行轮询 - 但我再次认为OP案例中的代理使得这是行不通的。
答案 1 :(得分:0)
除安德鲁提供的内容外,还有另一种选择。您可以动态地将脚本标记注入DOM,其中src属性可以指向任何域上的javascript文件。
在jQuery中,您可以通过将“jsonp”指定为ajax请求的数据类型来实现此目的。您可以在此处详细了解此方法:
答案 2 :(得分:0)
我终于通过使用隐藏的iframe来解决这些问题。我在我的博客上发布了一篇文章,其中包含更多细节,并将代码推送到codeplex:
http://www.deepcode.co.uk/2009/11/overcoming-cross-domain-issues-between.html