3

简而言之,使用 RichHtmlField 我们可以自定义哪些样式和标记样式出现在功能区的下拉列表中。我们不能使用 OOTB 内容编辑器 Web 部件。

在询问/对比 RichHtmlField 与 CEWP(发出 HTML/JavaScript)之后,我确实能够找到 JavaScript 解决方案。

虽然 RichHtmlField 发出页面脚本来初始化字段控件,但 CEWP 不会发出这样的初始化脚本。此外,RichHtmlField 发出的 HTML 属性数量明显多于 CEWP,其中两个属性是PrefixStyleSheetStyleSheet

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 内的母版页,它将跨站点工作。

那里有一个计时器,因为根据脚本加载的顺序,某些东西可能会在你完成之后弄乱你所做的事情。让我知道这是否有效/不适合您。

在某处保持对这个问题的解决方案的运行记录会很酷。

干杯,

4

1 回答 1

2

信不信由你迟到了 4 年这篇文章很有帮助!

为了使它工作,我不得不改变这个:

 $("td[RteRedirect]").each(function() {

    var id = $(this).attr("RteRedirect"); 
        editSettings = $("#" + id);

谢谢

于 2016-05-19T15:33:51.593 回答