我目前正在开发一个大型 Intranet mashup,它使用 sharepoint 来聚合来自其他几个内部服务器的内容,例如:
- moss.myapp.internalserver.local - MOSS 门户
- ssrs.myapp.internalserver.local - SQL Server 报告服务报告
- app.myapp.internalserver.local - 自定义 ASP.NET MVC 表单
moss 门户使用 jQuery 对话框中的 iframe 调用 MVC 表单(准确地说是四四方方),然后使用 javascript 回调到 moss 页面以执行各种操作,包括关闭 jQuery 对话框。
这显然会使浏览器上的相同来源策略失败(因此不允许 javascript 从不同来源调用框架/窗口),所以我通过设置 document.domain = "myapp.internalserver.local" 解决了这个问题MOSS 母版页和应用程序表单页面,允许跨域脚本在 moss 和应用程序内容之间正常运行。
所以,这很好用,直到我使用报表查看器 Web 部件(sharepoint 的默认部件,加上一些第三方的,包括我自己的,它们只使用 ASP.NET 报表查看器组件)将 SSRS 报表添加到组合中。
报表查看器似乎需要一个将 html 返回到页面中的处理程序。但是,生成的报告查看器内容似乎会渲染并编写脚本到某些 iframe 中,但它没有给我们任何方法来在这些 iframe 上设置 document.domain,因此脚本失败。
充其量这意味着我们会在状态栏中看到黄色的小 javascript 错误图标,更糟糕的是,在使用动态渲染的情况下,“渲染报告”进度轮只是动画并且从不提供报告。
以前有没有人见过这个,如果有,你是怎么解决的?
谢谢,托尼