在其他系统Iframe中显示SharePoint 页面
前段时间在做一个项目,要求将SharePoint 的 OWA(Office Web Apps)中的文档显示页面嵌入到另外一个OA系统中,提供给用户可以通过浏览器查看SharePoint文档的能力。
嵌入我们能想到的方法就是 Iframe,这里我们暂且忽略可能存在的SSO问题。
当将SharePoint页面嵌入到Iframe中的时候,遇到了一个问题。

“此网页不能显示在一个框架中 ……”,后来经过反复的查找原因,也参考了国外的网站内容。
X-Frame-Options 就是它折磨了我一天多。后来在发现在我买了很久却只看了一章的书里有这个内容的介绍,《白帽子讲Web安全》中有一章就介绍了 X-Frame-Options,主要用来防止 ClickJacking(点击劫持)。是一种安全策略。
这个时候就不难理解SharePoint为什么会出现这种错误了。
错误原因找到了,接下来就是 解决它。
解决的思路是 用程序将 X-Frame-Options 删除掉。这样做有些冒险。但在内网环境中,我倒觉得完全可以一试。
具体方法
1. 在VS中创建一个SharePoint 解决方案项目,选择场解决方案。
2. 在项目中添加一个Feature,并为Feature添加Event事件。
3. 右键点击项目名称,选择新建项。选择ASP.Net模块。

4. 输入以下代码。
public class PermissiveXFrameHeaderModule : IHttpModule
{
private const string XFRAMEOPTIONS_HEADERNAME = "X-FRAME-OPTIONS";
private void context_PreSendRequestHeaders(object sender, EventArgs e)
{
HttpApplication application = (HttpApplication)sender;
application.Response.Headers.Remove("X-FRAME-OPTIONS");
}
public void Dispose()
{
}
public void Init(HttpApplication context)
{
context.PreSendRequestHeaders += new EventHandler(this.context_PreSendRequestHeaders);
}
}
5. 在Feature的事件程序中 添加代码如下
public class Feature1EventReceiver : SPFeatureReceiver
{
public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
SPWebApplication application = (SPWebApplication)properties.Feature.Parent;
foreach (SPWebConfigModification modification in this.Modifications)
{
application.WebConfigModifications.Add(modification);
}
application.WebService.ApplyWebConfigModifications();
application.Update();
}
public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
{
SPWebApplication application = (SPWebApplication)properties.Feature.Parent;
foreach (SPWebConfigModification modification in this.Modifications)
{
application.WebConfigModifications.Remove(modification);
}
application.WebService.ApplyWebConfigModifications();
application.Update();
}
private SPWebConfigModification[] Modifications
{
get
{
SPWebConfigModification[] modificationArray = new SPWebConfigModification[1];
SPWebConfigModification modification = new SPWebConfigModification("add[@name='PermissiveXFrameHeaderModule']", "configuration/system.webServer/modules");
modification.Owner = "PERMISSIVEXFRAME";
modification.Sequence = 0;
modification.Type = 0;
modification.Value = "<add name=\"PermissiveXFrameHeaderModule\" type=\"XMlFrame.PermissiveXFrameHeaderModule, XMlFrame,Version=1.0.0.0, Culture=neutral, PublicKeyToken=16937942f8602783\" />";
modificationArray[0] = modification;
return modificationArray;
}
}
6. 最后一步 就是部署它 就ok了
好吧,我承认我这个参考了老外写的东西,但日子有点久了,实在不知道他是谁了 blog地址是什么了。
在其他系统Iframe中显示SharePoint 页面的更多相关文章
- 点击a标签,跳转到iframe中,并在iframe中显示指定的页面
点击a标签,跳转到iframe中,并在iframe中显示指定的页面 1.用a标签的target属性 <iframe id="myFrameId" name="myF ...
- iframe中操作主体页面的元素,方法
在不使用三大框架的情况下,iframe的使用可以做到在页面中直接引入别的页面作为当前页面的一部分,但是在iframe的使用过程中存在一些相互之间的操作 例如在iframe中获取主页面的元素,使用主页面 ...
- 关于Eclipse中Browser中显示html页面的总结.
用Eclipse中的Browser显示html页面,因为"just small thing.. browser in the studio is light browser.. it can ...
- Android的缓存图片不在系统图库中显示的解决办法
Android的图库会在开机的时候扫描SD卡中的图片,视频等文件,有很多App的私有图片不想在图库中显示,就需要另外处理了. 解决办法:在缓存图片的文件夹中创建 .nomedia 文件. 1. &qu ...
- cocos2dx --- 在游戏中显示HTML页面
前文介绍了简单的富文本组件RichText,如今我们来了解下由freeType库做出来的第三方组件.可以直接显示html页面,而且可以实现超链接.和触摸事情. 步骤: 1.在github中 下载 ...
- iframe中涉及父子页面跨域问题
什么是跨域? 跨域,指的是浏览器不能执行其他网站的脚本.它是由浏览器的同源策略造成的,是浏览器施加的安全限制.所谓同源是指相同的域名.协议和端口,只要其中一项不同就为跨域. 举几个例子: http:/ ...
- 在iframe中获取父页面的元素
a.html <!DOCTYPE html> <html> <head> <title></title> </head> < ...
- 在chrome浏览器和在IE浏览器中显示的页面样式不一样的解决办法
在IE浏览器中添加 一行代码即可:<meta http-equiv="X-UA-Compatible" content="IE=edge" /> 位 ...
- iframe中在父窗口打开子页面
我们在做页面框架的时候,通常会采用一个iframe来显示子页面,但有这么种情况,就是session失效时,登录页面就会显示在iframe中,这不符合常理,一般应该显示在顶部才对. 下面的js代码可以解 ...
随机推荐
- 深入理解JSON对象
× 目录 [1]语法规则 [2]stringify [3]parse[4]eval 前面的话 json(javascript object notation)全称是javascript对象表示法,它是 ...
- 将 instance 连接到 vlan100- 每天5分钟玩转 OpenStack(95)
上一节我们创建了 vlan100,今天将部署两个 instance 到 vlan 并验证其连通性. 同时我们也将讨论底层网络结构的变化. launch 新的 instance "cirros ...
- Android使用TextureView播放视频
1.引言 如果你想显示一段在线视频或者任意的数据流比如视频或者OpenGL 场景,你可以用android中的TextureView做到. 1).TextureView的兄弟SurfaceView 应用 ...
- Android动画学习(一)——Android动画系统框架简介
2015-11-09补充:Drawable Animation极有可能是Frame Animation 这几天在找工作,面试的时候被问到了Android动画,之前完全没接触过这部分,直接给懵了,当然其 ...
- 如何利用Oracle外部表导入文本文件的数据
同事最近在忙数据一致性比对工作,需要对不同文本文件中的数据进行比对,有的文件较大,记录较多,如果用普通的文本编辑器打开的话,很显然,会很卡,甚至打不开. 基于此,可将该文本文件的数据导入到数据库中,在 ...
- MySQL官方.NET Core驱动已出,支持EF Core
千呼万唤始出来MySQL官方.NET Core驱动已出,支持EF Core. 昨天MySQL官方已经发布了.NET Core 驱动,目前还是预览版,不过功能已经可用. NuGet 地址:https:/ ...
- 去百度API的百度地图准确叠加和坐标转换的解决方案研究
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 目前项目上如果要使用百度地图,得加载百度的开发包,然后通过百 ...
- Asp.Net 使用Npoi导出Excel
引言 使用Npoi导出Excel 服务器可以不装任何office组件,昨天在做一个导出时用到Npoi导出Excel,而且所导Excel也符合规范,打开时不会有任何文件损坏之类的提示.但是在做导入时还是 ...
- idea 自动提示生成 serialVersionUID
from: http://tonycody.blog.51cto.com/8421818/1401422 Intellij IDEA 默认没启用这个功能. Setting->Inspection ...
- mongodb安装配置
下载安装 官网下载地址:https://www.mongodb.com/download-center 执行msi文件. 环境配置 可以参照我的步骤来进行配置,目录根据个人需要设置. 解压安装包到D: ...