2017年1月5日,星期四

Changes to Custom 动作 and handling of JavaScript in SharePoint Online

最近,我们的自定义操作停止在Office 365中的现代文档库中工作。对此感到惊讶,因为据我们所知,’不要做任何不利的事情“new”有关使用现代团队网站和现代文档库的指南。从现代文档库开始,就不支持使用ScriptSrc或ScriptBlock的自定义操作(与JSLink自定义相同)。但是我们当时’不要做任何这些事情–我们的具体细节是:

  • 使用基于URL的操作的自定义操作,该操作打开了模式对话框(弹出窗口)–在我们的情况下,向用户显示自定义选项页面
  • 用于“EditControlBlock”作为位置,因此我们的菜单项出现在每个文档的上下文菜单中
  • 在我们的网站上注册“base document”我们的文档库中使用的内容类型

一段时间以来,一切都很棒-正如预期的那样,我们的菜单项同时出现在经典和现代文档库中。但是,在12月初(2016年),我们的菜单项(最终)从现代体验中消失了。这些图像显示了我们的菜单项(名为“Actions”)在经典视图中可见,但在现代视图中不可见:

经典:

经典_

现代:

现代_

New rules for Custom 动作

Essentially, Microsoft have made changes in exactly what is supported with Custom 动作. I guess you could say this doesn’将100%与该主题的先前指南保持一致–或至少某些低级细节含糊不清或易于解释。例如, 现代文献库和可扩展性的最新进展 博客文章说:

“We’在这里已经取得了一些良好的进展。 主题,全球导航链接, 现代文档库体验已经支持扩展功能区和上下文菜单的基于URL的自定义操作。 这确保了利用这些功能的客户和合作伙伴可以使用现代文档库体验,而不会影响其自定义设置。”

就我们而言,我们认为我们应该没事,因为我们’重新使用URL(而不是ScriptSrc或ScriptBlock)。但是,与Office 365工程团队交谈后,很明显 包含JavaScript的URL (例如,网址=’javascript:OpenDialog()’)不再被允许–尽管这一直有效到12月初。 另外, 按内容类型定位不再有效 –当前唯一的选择是按列表模板类型作为目标,例如:

  • 100– custom list
  • 101– document library
  • ..等等

更新–现在可以再次按内容类型定位。因此,您可以再次按内容类型或列表模板类型作为目标。

我感谢产品小组中的人的帮助,他们帮助我了解了他们的代码目前正在做什么,以及将来的发展方向– thanks guys.

无论如何,我们必须进行一些更改。在我们的情况下,由于我们无法再从菜单中打开对话框(因为需要一些JavaScript),因此我们’重新改变我们的体验,以将用户导航到整个页面。另外,我们需要将定位方式从内容类型更改为列表模板类型– that’基本上可以,但是实际上确实为我们提供了与我们真正想要的范围稍有不同的范围。

这些变化会影响到您吗?如果是这样,你’我可能已经注意到– but either way, it’SharePoint开发人员明确了解该领域的最新发展绝对是值得的。总体而言,这类列表的内容更长,而现代列表和库不再支持这些内容,包括:

  • 自定义母版页
  • JSLink(字段和视图类型)
  • AlternateCssUrl
  • Custom 动作 which use ScriptLink to add JavaScript to the page

好的一面是,现在有一些MSDN文章形式的官方文档,它们提供了比我更多的细节。’米包括这里。我强烈建议您仔细阅读以下内容:

使用经典体验作为解决方法

当然请记住,这些更改不会’影响经典体验。如果您选择继续使用它(例如,在租户级别上设置),’对此感到高兴。我们当时’t unfortunately, because we want our uses to have the benefits of the 新 document library UX (better mobile experience, improved metadata editing, 新 summary panel, sorting/filtering enhancements and so on).

展望未来(尤其是围绕Office 365中的JavaScript)

Microsoft have noted in several places that 新 mechanisms will come to SharePoint Online to match many of the previous capabilities. They may not take exactly the same form as the previous mechanisms, but it should be possible to achieve the same overall result. These include:

  • 自定义母版页-> some other “deep branding”控制(可能会或可能不会提供控制 充分 HTML)
  • JSLink->其他一些机制来控制列表视图和字段的呈现
  • CustomAction + ScriptLink->其他将JavaScript添加到页面的机制

我特别考虑JavaScript’显然,将增加管理员对脚本批准的控制–这样做的想法是提供更多的管理,以便开发人员在未经广泛批准的情况下不能添加任意脚本。毕竟’s为什么Microsoft进行了一些最近的更改以撤消以前支持的方法–他们确实留下了漏洞,可能会给某些组织带来麻烦。尽管旅途中偶尔会遇到痛苦,但我认为我们所有人都必须接受这些变化使情况变得更好,并且由此产生的总体状况应该更好。

5条评论:

Sympmarc说过...

尽管我当然了解治理的必要性,但我担心,更多的约束只会意味着大型企业的生产力下降。'做好治理。要是我们'强制每个JavaScript都获得某种形式的管理员批准,许多强大的自定义功能根本就不会发生。由于人们转向其他能够为其提供所需功能的解决方案,因此要求所有更改以解决IT瓶颈可能是该平台的丧钟。

M.

克里斯·奥'Brien说过...

@马克

但是你可以'请避免在用户上下文中运行JavaScript会做危险的事情(例如,将敏感数据发送给恶意服务)。它'都是困难的平衡!

COB。

克鲁纳尔·帕特尔(Krunal Patel)说过...

we had same issue and contacted MS Support and after 10 days of consultation with product team they comeback with info, it is architecture change and will have 新 way to support customisation sometime in first quarter of 2017.

威廉·范·斯特里恩说过...

克里斯,你好
感谢您分享这些经验。我非常同意Marc的观点:SharePoint的一个重要方面(无论是本地还是在线)都是使高级用户能够将业务解决方案构建为现代的客户端应用程序。无需通过IT。通过IT批准的脚本引入障碍将削弱这种功能,并使业务用户将目光投向其他平台'避免不必要的业务发展(例如使用Lightning平台的Salesforce.com)。
还要反驳您为什么需要进行治理以防止滥用的争论:对SPO在线部署脚本的治理并不能防止这种情况,可以通过CSOM和SharePoint服务使用仍然部署在SharePoint外部的脚本的SharePoint数据/文档。自2013年以来,该平台一直在大力发展:通过外部应用程序扩展SharePoint(例如,由提供商托管的加载项)。在所有基于客户端的情况下,(敏感)访问都被限制为允许当前用户访问的内容。通过客户端脚本,您无法绕过SharePoint权限。权限是正确的治理级别,可以防止未经授权的数据使用和共享。

问候,威廉。

未知说过...

嘿克里斯,

我只是遇到了尝试创建Sharepoint托管加载项并将Javascript CSOM与跨域库一起使用的问题,从而在顶级网站上创建了自定义操作,以注入JavaScript以开始为客户建立品牌'的Sharepoint网站。我一直收到"Access Denied"即使我检查并重新检查我是否正确使用了CDL并在我的AppManifest中要求正确的权限,也会出现错误。几个小时后,我终于找到了解决方案,并从StackOverflow找到了帮助。这是网站管理员设置"阻止用户在自助服务创建的网站上运行自定义脚本"从我读的书中如果在管理部分中进行了更改,则更改设置最多可能需要24小时,因此我发现您可以使用PowerShell通过以下工具将DenyAddAndCustomizePages设置为0 这里的c-sharpcorner

我更改了设置,并能够通过github上的Sharepoint PnP借助ScriptLink添加自定义操作 这里。现在一切正常,我的页面正在接受JavaScript注入!

我想分享一下,以防它对您或本文中遇到的其他人有所帮助。

感谢您的精彩文章!
保罗