在其他系统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代码可以解 ...
随机推荐
- 【开源】OSharp框架解说系列(2.2):EasyUI复杂布局及数据操作
OSharp是什么? OSharp是个快速开发框架,但不是一个大而全的包罗万象的框架,严格的说,OSharp中什么都没有实现.与其他大而全的框架最大的不同点,就是OSharp只做抽象封装,不做实现.依 ...
- Neutron 默认安全组规则 - 每天5分钟玩转 OpenStack(115)
Neutron 为 instance 提供了两种管理网络安全的方法: 安全组(Security Group)和虚拟防火墙. 安全组的原理是通过 iptables 对 instance 所在计算节点的网 ...
- Android微信分享图片大于32k进行压缩
微信分享视频的时候,需要传一个图片数组,大小不能大于32k. 解决方案:使用Bitmap自带的compress方法解决了这个问题. 源码如下: <span style="font-si ...
- 使用jQuery Draggable和Droppable实现拖拽功能
上篇博客中已经介绍了web开发中基本拖放原理,现在给出需要完成的功能.最后运行的效果如下图所示: 主要功能需求说明: 1.左侧的元素结构最后会通过Ajax call服务器的数据来生成,能支持多级元素. ...
- hdu4833 Best Financing(DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4833 这道题目关键的思想是从后往前dp,dp[i]表示在第i处投资xi能获得的最大收益,其中xi表示从 ...
- DDD 领域驱动设计-在动手之前,先把你的脑袋清理干净
惨不忍睹的翻译 英文原文:http://www.codeproject.com/Articles/339725/Domain-Driven-Design-Clear-Your-Concepts-Bef ...
- 1Z0-053 争议题目解析346
1Z0-053 争议题目解析346 考试科目:1Z0-053 题库版本:V13.02 题库中原题为: 346.What is the impact of the results of the outp ...
- java操作数据库增删改查的小工具1--TxQueryRunner
在java程序中,一般使用jdbc连接数据库,比较麻烦,在看传智教程时学了一个工具类,用于简化与数据库之间的操作步骤,就是TxQueryRunner,他是QueryRunner的子类,用起来和他是一样 ...
- Entity FrameWork 365日系列文章源码研究 (1)
By KMSFan -- 此系列的文章只作为自己的读书笔记,不纳入博客园首页. 总结的知识点: 1.DBContext 类 2.Attribute里的属性(NotNull) 3.DbContext实 ...
- WIFI网络操作
WIFI网卡状态(不可用状态值为1,正在关闭值为0,可用状态值为3,正在打开值为2) WIFI网卡状态是由一系列的整型常量表示,这一系列的整型常量都存储于WifiManager的类中 1.WIFI_S ...