Sharepoint MS-WOPI客户端在编辑时拒绝对iframe进行帧处理,但在预览时允许对iframe进行帧处理
我在Sharepoint中有一个客户端,它正确地接受URL请求以打开Word文档,如: 通过直接在浏览器中打开URL,或将其设置为iframe中的源,这样做效果相当好:Sharepoint MS-WOPI客户端在编辑时拒绝对iframe进行帧处理,但在预览时允许对iframe进行帧处理,iframe,sharepoint,content-security-policy,ms-wopi,Iframe,Sharepoint,Content Security Policy,Ms Wopi,我在Sharepoint中有一个客户端,它正确地接受URL请求以打开Word文档,如: 通过直接在浏览器中打开URL,或将其设置为iframe中的源,这样做效果相当好: <iframe _ngcontent-ryg-c10="" frameborder="0" height="750" width="100%" src="https://myCompany.sharepoint.com/:w:/r/
<iframe _ngcontent-ryg-c10="" frameborder="0" height="750" width="100%" src="https://myCompany.sharepoint.com/:w:/r/teams/Test-EZ-CO-LON/Test-CO-L1227/_layouts/15/WopiFrame.aspx?sourcedoc=%7BCDE12345-ABC1-4A5F-9097-008E876E4E66%7D&action=interactivepreview"></iframe>
<iframe _ngcontent-ryg-c10="" frameborder="0" height="750" width="100%" src="https://myCompany.sharepoint.com/:w:/r/teams/Test-EZ-CO-LON/Test-CO-L1227/_layouts/15/WopiFrame.aspx?sourcedoc=%7BCDE12345-ABC1-4A5F-9097-008E876E4E66%7D&action=edit"></iframe>
因此,该URL对于直接打开和在iframe中使用都非常有效
问题是,如果将“interactivepreview”更改为编辑操作值,如“edit”,例如:
<iframe _ngcontent-ryg-c10="" frameborder="0" height="750" width="100%" src="https://myCompany.sharepoint.com/:w:/r/teams/Test-EZ-CO-LON/Test-CO-L1227/_layouts/15/WopiFrame.aspx?sourcedoc=%7BCDE12345-ABC1-4A5F-9097-008E876E4E66%7D&action=interactivepreview"></iframe>
<iframe _ngcontent-ryg-c10="" frameborder="0" height="750" width="100%" src="https://myCompany.sharepoint.com/:w:/r/teams/Test-EZ-CO-LON/Test-CO-L1227/_layouts/15/WopiFrame.aspx?sourcedoc=%7BCDE12345-ABC1-4A5F-9097-008E876E4E66%7D&action=edit"></iframe>
直接在Web浏览器中打开URL时,仍然可以正确打开该URL,但如果此新URL用于以下iframe中:
<iframe _ngcontent-ryg-c10="" frameborder="0" height="750" width="100%" src="https://myCompany.sharepoint.com/:w:/r/teams/Test-EZ-CO-LON/Test-CO-L1227/_layouts/15/WopiFrame.aspx?sourcedoc=%7BCDE12345-ABC1-4A5F-9097-008E876E4E66%7D&action=interactivepreview"></iframe>
<iframe _ngcontent-ryg-c10="" frameborder="0" height="750" width="100%" src="https://myCompany.sharepoint.com/:w:/r/teams/Test-EZ-CO-LON/Test-CO-L1227/_layouts/15/WopiFrame.aspx?sourcedoc=%7BCDE12345-ABC1-4A5F-9097-008E876E4E66%7D&action=edit"></iframe>
然后Sharepoint拒绝帧,发送此错误消息:
拒绝诬陷https://myCompany.sharepoint.com/'因为祖先违反了以下内容安全策略指令:“frame Orients‘self’teams.microsoft.com*.teams.microsoft.com*.skype.com*.teams.microsoft.us local.teams.office.com*.powerapps.com*.yammer.com*.officeapps.live.com*.office.com*.stream.azure-test.net*.microsoftstream.com”。
因此,总而言之:
- 对于不可编辑的WOPI操作(例如“interactivepreview”),URL适用于所有场景(在iframe和非iframe中)
- 对于可编辑的WOPI操作(例如“编辑”),URL只有在直接使用(非iframe)时才能正常工作
- 对于可编辑的WOPI操作,URL在iframe中使用时不起作用,因为前面提到的错误
这是WOPI错误配置、Sharepoint错误配置还是客户端(浏览器)请求错误配置,或其他什么?
帧祖先
检查DOM上的所有父上下文看起来像action=edit
模式使用一些中间iframe。如果CSP在您的控制下,请添加https://myCompany.sharepoint.com
进入帧祖先
指令。否则规则为irame头通过MS-WOPI服务器,也许可以通过解决。假设从错误消息和sharepoint.com域为您的文件提供服务,您正在sharepoint Online(=非sharepoint server)上运行,因此SP实例不在您的控制之下,您无法按照中所述设置CSP。@rocky这是正确的。然后它就不起作用了。有一些棘手的解决方法,比如在浏览器插件中拦截请求,或者构建自己的主机页,并将sourcedoc翻译为wopisrc,但我不推荐任何一种。更好的解决方法选项是只显示指向文件的链接,并让用户在新窗口中打开它。顺便问一下-是否有一个选项(按钮)可以从“interactivepreview”切换到“edit”?@rocky,是的,就是这样一个按钮。此时,我只是在新的浏览器窗口中提供文档。