简而言之,使用 RichHtmlField 我们可以自定义哪些样式和标记样式出现在功能区的下拉列表中。我们不能使用 OOTB 内容编辑器 Web 部件。
在询问/对比 RichHtmlField 与 CEWP(发出 HTML/JavaScript)之后,我确实能够找到 JavaScript 解决方案。
虽然 RichHtmlField 发出页面脚本来初始化字段控件,但 CEWP 不会发出这样的初始化脚本。此外,RichHtmlField 发出的 HTML 属性数量明显多于 CEWP,其中两个属性是PrefixStyleSheet和StyleSheet。
PrefixStyleSheet标识下拉菜单中使用的样式表前缀。 StyleSheet是品牌 css 文件的服务器相对 URL。
因此,在所有这些事情都成立的情况下,我们应该能够使用 jQuery 使用品牌样式表初始化 CEWP:
<script type="text/javascript">
ExecuteOrDelayUntilScriptLoaded(function() {
// window.setTimeout(function() {
$("div[RteRedirect]").each(function() {
var id = $(this).attr("RteRedirect"),
editSettings = $("#" + id);
if(editSettings.length > 0 && editSettings[0].PrefixStyleSheet != 'yourcustom-rte') {
editSettings[0]['PrefixStyleSheet'] = 'yourcustom-rte';
editSettings[0]['StyleSheet'] = '\u002fStyle Library\u002fen-US\u002fThemable\u002fCore Styles\u002f<somecustomstylesheet>.css';
RTE.Canvas.fixRegion(id, false);
}
});
// }, 2000);
}, "sp.ribbon.js");
</script>
我希望这可以帮助别人。这段代码可以有很多不同的方向。我只是介绍基本面。如果您将此添加到 EditModePanel 内的母版页,它将跨站点工作。
那里有一个计时器,因为根据脚本加载的顺序,某些东西可能会在你完成之后弄乱你所做的事情。让我知道这是否有效/不适合您。
在某处保持对这个问题的解决方案的运行记录会很酷。
干杯,
米