dlio 发表于 2015-9-25 12:24:33

在其他系统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;   
                SPWebConfigModification modification = new SPWebConfigModification("add[@name='PermissiveXFrameHeaderModule']", "configuration/system.webServer/modules");   
                modification.Owner = "PERMISSIVEXFRAME";   
                modification.Sequence = 0;   
                modification.Type = 0;   
                modification.Value = &quot;<add name=\&quot;PermissiveXFrameHeaderModule\&quot; type=\&quot;XMlFrame.PermissiveXFrameHeaderModule, XMlFrame,Version=1.0.0.0, Culture=neutral, PublicKeyToken=16937942f8602783\&quot; />&quot;;   
                modificationArray = modification;   
                return modificationArray;   
            }   
      }
  6. 最后一步 就是部署它 就ok了
  好吧,我承认我这个参考了老外写的东西,但日子有点久了,实在不知道他是谁了 blog地址是什么了。
页: [1]
查看完整版本: 在其他系统Iframe中显示SharePoint 页面