"SharePoint Iframe Excel Services 报错‘此内容不能显示在一个框架中’"
在使用SharePoint 2013时,如果尝试在Iframe中嵌入Excel Services发布的Excel工作簿,可能会遇到一个特定的错误:“此内容不能显示在一个框架中”。这个问题通常是由Web浏览器的安全策略引起的,特别是为了防止一种名为“点击劫持攻击”(ClickJacking attack)的安全威胁。
点击劫持攻击是一种网络欺诈技术,攻击者通过隐藏或伪装网页元素,诱使用户点击看似无害的链接或按钮,但实际上执行的是攻击者预设的操作。例如,用户可能以为点击的是关闭广告的按钮,但实际上是触发了其他恶意行为,如泄露个人信息或进行非法操作。
为了防范这种攻击,许多Web服务器会设置HTTP响应头部的`X-Frame-Options`字段。这个字段允许服务器指定其内容是否可以在iframe中加载。默认情况下,SharePoint可能会设置`X-Frame-Options`为`SAMEORIGIN`,只允许自己的页面在自身的框架内加载,防止跨站框架注入(CSFR)和点击劫持。
当SharePoint的Excel Services页面在外部系统中的Iframe内加载时,由于`X-Frame-Options`策略,浏览器会阻止显示内容,从而引发“此内容不能显示在一个框架中”的错误。
解决这个问题的一种方法是检查并调整SharePoint服务器的配置。若要允许Excel Services内容在Iframe中加载,需要确保`X-Frame-Options`设置为`ALLOW-FROM`,并指定信任的来源。这通常涉及修改SharePoint的Web应用配置或使用 SharePoint PowerShell 命令行工具进行设置。例如,你可以使用以下PowerShell命令:
```powershell
$webApp = Get-SPWebApplication "http://yourwebappurl"
$webApp.Update()
$webApp.UseCrawler = $true
$webApp.XFrameOptionsDeny = $false
$webApp.XFrameOptionsAllow = "http://trusteddomain.com"
$webApp.Update()
```
请将`http://yourwebappurl`替换为你的SharePoint Web应用程序URL,`http://trusteddomain.com`替换为你希望在Iframe中加载内容的可信域名。
然而,这种方法需谨慎操作,因为放宽`X-Frame-Options`设置可能导致系统对点击劫持攻击更加易感。因此,只应允许那些确实需要在Iframe中显示SharePoint内容的可信域,并确保这些外部系统的安全性。
此外,还有另一种解决方案,即使用SharePoint的CrossDomainLibrary。这个库提供了一种安全的方法,允许跨域数据交互,但它需要更复杂的配置,并且可能涉及到JavaScript和Ajax的使用。
解决“此内容不能显示在一个框架中”的错误,需要理解点击劫持攻击的原理,以及SharePoint如何通过`X-Frame-Options`策略保护自身。通过适当的配置调整或利用SharePoint的跨域库,可以实现安全地在Iframe中嵌入Excel Services内容。