在TinyMCE中更改默认字体系列

20

我已经成功根据这里的文档更改了编辑器中的默认字体,但是这给我留下了一个问题。原始默认字体不再在字体下拉列表中起作用。

原始默认:Verdana
新默认:MyCustomFont

当我输入到编辑器中时,默认情况下我会看到我的MyCustomFont字体。如果我尝试将其更改为Verdana(原始默认值),则不会发生任何事情。我可以将它更改为除Verdana之外的任何字体系列。 我还注意到,当我在下拉列表中选择MyCustomFont时,内容会被包围在具有内联样式的span中。这不会发生在原始默认字体上(因此什么也不会发生)。

对我来说,似乎缺少一份关键的文档-如何告诉编辑器(特别是字体功能),我在css中定义的默认字体是默认字体。

我已经通过谷歌搜索了很多次,但没有结果。其他人似乎都满足于上面提到的文档。我是唯一遇到这个问题的人吗?如果不是,请帮帮我! :)

请注意,这个问题的答案不回答我的问题。


你怎么将它改成Verdana字体? - Thariama
我没有将它更改为Verdana字体。看起来这是编辑器的默认设置。 - Paul Fleming
你试过使用字体下拉菜单吗? - Thariama
当我在字体下拉菜单中选择Verdana时,什么也没有发生。我怀疑它仍然认为Verdana是默认字体。 - Paul Fleming
看起来像是一个bug。在这种情况下,你应该提交一个bug报告:www.tinymce.com/develop/bugtracker_bugs.php - Thariama
显示剩余2条评论
12个回答

34

或许已经太晚了,但是...

$('.tinymce').tinymce({
    setup : function(ed) {
        ed.onInit.add(function(ed) {
            ed.execCommand("fontName", false, "Arial");
            ed.execCommand("fontSize", false, "2");
        });
    }
});

编辑

对于 TinyMCE 4,如 @jason-tolliver 和 @georg 所述,语法为:

ed.on('init', function (ed) {
    ed.target.editorCommands.execCommand("fontName", false, "Arial");
});

1
很棒的答案。大多数方法都集中在CSS上,但这是更清晰的内联方式。当您从TinyMCE生成PDF时,它也会有所帮助! - Nishant
1
在TinyMCE 4中,语法是ed.on('init', function (ed) {...}) - Jason Tolliver
@JasonTolliver,这会抛出一个错误:对象不支持此属性或方法“execCommand”。 - Brain2000
2
ed.on('init', function(ed) { ed.target.editorCommands.execCommand("fontName", false, "Calibri"); 使用 带有版本 4 的该方法是正确的方式。 - Georg
@Georg - 谢谢!这是版本4的完全正确答案;我的回答编辑被拒绝了,所以我希望人们能够往下看找到你的答案。 - Autumn Leonard
不幸的是,这会将焦点设置到编辑器上。有没有办法避免这种情况?我找不到方法... - Mario Eis

24
// Init TinyMCE
$('#content').tinymce({
    setup : function(ed)
    {
        ed.on('init', function() 
        {
            this.getDoc().body.style.fontSize = '12px';
            this.getDoc().body.style.fontFamily = 'serif';
        });
    }
});

12

对于那些使用 tinymce.init({ 进行初始化且不能直接实现 Radius Kuntoro 的答案的人。

我的初始化看起来像这样

tinymce.init({
            selector: '#editor',
            menubar: false,
            plugins: ['bbcode'],
            toolbar: 'undo redo | bold italic underline',    
            setup : function(ed)
            {
                ed.on('init', function() 
                {
                    this.getDoc().body.style.fontSize = '12';
                    this.getDoc().body.style.fontFamily = 'Arial';
                });
            },
        });    

适用于Tinymce 5.x。 - Volmarg Reiso

4
对于 TinyMCE 4.6.3,这似乎是正确的做法:
tinymce.init({
    setup: function (ed) {
        ed.on('init', function (e) {
            ed.execCommand("fontName", false, "Verdana");
        });
    }
});

2
根据TinyMce网站的说明,您可以在init函数中嵌入样式表,如下所示:

tinymce.init({
    content_css : 'path/to/style/sheet',
    body_class: 'define-class-name-without-dot-at-the-first'
});

它可以正常工作,而且您不需要设置任何内容。 请在tinyMCE网页上查看


1
一些人将在TinyMCE的EditorManager范围内工作,该范围提供两个事件:AddEditorRemoveEditor。当正在生成TinyMCE的新实例并触发AddEditor时,编辑器实际上尚未初始化,因此调用getDoc()将返回null。
您需要在其中创建一个init监听器。
tinyMCE.EditorManager.on('AddEditor', function (event) {
    ... other code ...

    event.editor.on('init', function() {
      this.activeEditor.getDoc().body.style.fontSize = '12px';
      this.activeEditor.getDoc().body.style.fontFamily = 'Times New Roman';
    });

    ... other code ...
  }
});

这至少在4.3.8版本中是正确的。

0
这对我有用:
  1. 在你的主题目录下 /wp-content/themes/yourtheme/ 中查找 functions.php,打开它并在 php 标签后添加一行代码。

    add_editor_style('custom-editor-style.css');
    
  2. 在同一个目录下,创建一个名为 custom-editor-style.css 的文件,并将以下代码添加到其中:

    @import url(https://fonts.googleapis.com/css?family=Open+Sans:400,700);
    * { font-family: 'Open Sans', sans-serif, Arial, Helvetica;}
    

清除浏览器缓存后,您将看到以下内容。

参考链接:https://blog.phi9.com/wordpress-editor-and-its-font/


0

我尝试过这种方法。 我使用TinyMce 5,在编辑器内部生成了一个body标签。 在初始化编辑器时,我设置了forced_root_block:'div',这意味着每次输入内容时我的根元素将始终是一个div。

 let tinyMceBody = tinymce.activeEditor.getBody();
      let divs = $(tinyMceBody).children('div');
      for(let i =0; i<divs.length; i++) {
        divs[i].style.fontFamily = 'Nunito';
}

所以我尝试捕获所有根元素并为它们设置默认样式。

当您编辑某些内容时,tinymce会将您编辑的内容用带有样式属性的span块包围起来,因此无论您在编辑器中手动编辑了什么,都会被覆盖。如果您不在编辑器中编辑文本,则我们附加在父元素上的默认样式forced_root_block:'div'将会保留。

尝试根据您的自定义要求使用上述技术制定解决方案。看起来该库对此没有明显的内部支持。

P.S:-

tinymce.activeEditor.dom.setStyles(tinymce.activeEditor.dom.select('div'), {'font-family' : 'Nunito'});

适用于所有div,但我只想应用于body标记的第一级子元素而不是所有div(包括子元素的子元素)。否则这也可以是一个解决方案。

0

我在tinymce 4.x中遇到了所有解决方案的困难。我既无法更改字体大小,也无法更改字体名称。在尝试了很多之后,我找到了解决方法。首先,我可以确认Jared的答案,非常感谢!默认设置下这两个命令将不起作用:

tinymce.EditorManager.execCommand("fontName", false, "12px");
tinymce.EditorManager.execCommand("fonSize", false, "Arial");

默认的字体大小是“pt”,而不是“px”。因此,要么通过[fontsize_formats][1]将显示的字体大小定义为“px”,要么直接使用“pt”传递所需的大小。对于tinymce.EditorManager.execCommand,tinymce也不太满意。您必须像'arial, helvetica, sans-serif'这样传递整个字体系列。这些命令在我的网站上有效:

tinymce.EditorManager.execCommand("fontName", false, "12pt");
tinymce.EditorManager.execCommand("fonSize", false, "arial, helvetica, sans-serif");

0

以上所有解决方案都对我没有用。所以,我以某种方式使用自定义逻辑修复了它。

editor.on('change', function (e) {
    let node = e.target.selection.getNode();
    if (node.nodeName === 'P' || node.parentNode.nodeName === 'BODY') {
        editor.dom.setStyle(node, 'font-size', "16px");
    }

    tinymce.triggerSave(); // to keep your textarea synced with above changes
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接