TinyMCE 的目标位置
selector
此选项允许指定一个 CSS 选择器,用于 TinyMCE 应当设为可编辑的区域。
在 TinyMCE 的常规编辑模式中使用此选项时,该元素会被替换为一个 iframe,TinyMCE 将在此 iframe 内执行所有操作。在 TinyMCE 的内联编辑模式中使用此选项时,该选择器可应用于任意块级元素,并直接在原地编辑内容,而不会用 iframe 替换该元素。
有关常规编辑模式与内联编辑模式差异的更多信息,请参阅 设置内联编辑模式。
类型: String
示例:替换页面上所有 textarea 元素
tinymce.init({
selector: 'textarea' // 根据 HTML 更改此值
});示例:替换 id 为 "editable" 的 textarea 元素
tinymce.init({
selector: 'textarea#editable'
});示例:在 id 为 "editable" 的 div 元素上启用内联编辑模式
tinymce.init({
selector: 'div#editable',
inline: true
});target
有时可能已有一个 DOM 元素的引用,例如当元素是动态创建的。在这种情况下,通过选择器初始化编辑器可能不太合理(因为必须先创建选择器——id 或 class)。在此类情况下,可以通过 target 选项直接提供该元素。
selector选项优先于target,因此若要使target生效,请勿使用selector选项。
类型: Node
示例:使用 target
const el = document.createElement('textarea');
document.body.appendChild(el);
// ...
tinymce.init({
target: el
});向编辑器添加占位内容
placeholder
此选项添加占位内容,当编辑器为空时显示。
如果在 textarea 元素上初始化编辑器,也可以使用 placeholder 属性。类型: String
示例:使用 placeholder
tinymce.init({
selector: 'textarea', // 根据 HTML 更改此值
placeholder: '在此输入...'
});配置编辑器 iframe
iframe_attrs
此选项允许在经典模式下运行时,为编辑器的内容 iframe 元素添加自定义属性。这些属性将在 iframe 创建过程中应用。
此选项仅影响主编辑器内容 iframe,不影响其他 iframe,例如预览框架、对话框 iframe 或编辑器内容中创建的 iframe 元素。
类型: Object
iframe_attrs 增强无障碍性tinymce.init({
selector: 'textarea', // 根据 HTML 更改此值
iframe_attrs: {
'aria-required': 'true',
'aria-describedby': 'editor-description'
}
});示例:使用 iframe_attrs 进行自定义样式设置tinymce.init({
selector: 'textarea', // 根据 HTML 更改此值
iframe_attrs: {
'style': 'background-color:rgb(64, 167, 99); border: 2px solid #ddd;',
'class': 'custom-editor-frame'
}
});示例:验证 iframe_attrs 配置// 编辑器初始化后,可以验证配置:
console.log(tinymce.activeEditor.options.get('iframe_attrs'));
// 输出: {style: 'background-color:rgb(64, 167, 99); border: 2px solid #ddd;', class: 'custom-editor-frame'}聚焦编辑器
Tab 顺序
页面元素(包括 TinyMCE)的 Tab 顺序,应通过在相关 HTML 元素上设置 tabindex 属性 来配置。浏览器将原生处理 Tab 顺序。
若要为 TinyMCE 编辑器配置 tabindex,请在编辑器的目标元素上设置该属性。
在 iframe(经典编辑器)模式下,TinyMCE 会将目标元素的 tabindex 属性复制到编辑器的 iframe,以确保此功能正常工作。
示例:配置 Tab 顺序
<script>
tinymce.init({
selector: 'textarea'
});
</script>
...
<input tabindex="1">
<textarea tabindex="2"></textarea>
<input tabindex="3">auto_focus
自动将焦点设置到一个编辑器实例。此选项的值应为编辑器实例的 id。编辑器实例 id 是被替换的原始 textarea 或 div 元素的 id。
类型: String
示例:使用 auto_focus
tinymce.init({
selector: 'textarea', // 根据 HTML 更改此值
auto_focus: 'element1'
});custom_ui_selector
使用 custom_ui_selector 选项指定希望 TinyMCE 视为编辑器界面一部分的元素。指定元素后,即使焦点移到匹配此选择器的元素上,编辑器也不会丢失选区。如果焦点移到匹配此选择器的元素上,则不会触发 editor blur 事件,因为它被视为编辑器界面的一部分。
类型: String
示例:使用 custom_ui_selector
tinymce.init({
selector: 'textarea', // 根据需要更改此值以匹配您的 HTML
custom_ui_selector: '.my-custom-button'
});
...
<textarea></textarea>
<button class="my-custom-button">Button</button>highlight_on_focus
在 TinyMCE 7.0 中,highlight_on_focus的默认设置已从false更改为true。在 TinyMCE 中使用highlight_on_focus: true选项的编辑器,在升级到 TinyMCE 7.0 时,可以从其 TinyMCE 初始化配置中删除此选项。
highlight_on_focus 选项会在实例化的 TinyMCE 编辑器获得输入焦点时为其添加蓝色轮廓。使用 oxide-dark 皮肤时,该轮廓为白色。
这样用户就能清楚地看到编辑器何时处于焦点状态,或者在有多个 TinyMCE 实例时,能看到哪个编辑器具有焦点。
类型: Boolean
默认值: true
可能的值: true,false
示例:使用 highlight_on_focus
tinymce.init({
selector: "textarea",
highlight_on_focus: false
});将 highlight_on_focus 与自定义皮肤结合使用
如果使用自定义皮肤,可以更新两个变量,使 highlight_on_focus 选项的外观与自定义皮肤相匹配。
这两条规则及其默认值为:
@edit-area-border-color: #2D6ADF; @edit-area-border-width: 2px;
这完全是可选的。如果默认值未更改,highlight_on_focus 选项在使用自定义皮肤时的行为与使用 TinyMCE 默认皮肤时完全一致。使用插件扩展 TinyMCE
向 TinyMCE 添加插件有两种选项:plugins 和 external_plugins。Tiny 建议使用 plugins 选项来添加随产品捆绑或包含在云订阅中的插件。自定义或第三方插件应使用 external_plugins 选项添加,以简化 TinyMCE 的更新和升级过程。
plugins
此选项允许配置 TinyMCE 在启动时尝试加载的插件。默认情况下,TinyMCE 不会加载任何插件。
插件可以按以下任一方式提供:
以空格或逗号分隔的插件名称字符串,例如
'plugin1 plugin2',或插件名称数组,例如
[ 'plugin1' , `plugin2' ]
类型: String 或 Array
示例:使用字符串的 plugins
tinymce.init({
selector: 'textarea', // 根据需要更改此值以匹配您的 HTML
plugins: 'advlist autolink link image lists charmap preview'
});示例:使用数组的 plugins
tinymce.init({
selector: 'textarea', // 根据需要更改此值以匹配您的 HTML
plugins: [ 'advlist', 'autolink', 'link', 'image', 'lists', 'charmap', 'preview' ]
});external_plugins
此选项允许从默认 TinyMCE 插件目录之外加载插件。只要所需文件存在,TinyMCE 在启动时就会尝试像往常一样加载这些插件。
在以下情况下可以使用此选项:
使用自定义插件。
从 CDN 加载 TinyMCE 但不加载插件。
从 tinymce-premium NPM 包加载付费插件,无需捆绑或堆叠文件。
从与 TinyMCE 核心文件分离的任何位置加载插件。
此选项接受一个对象,该对象包含插件名称及其 JavaScript 文件应加载位置 URL 的 key-value 键值对。
提供的 URL 可以是:
绝对 URL:包含协议,例如
https://www.example.com/plugin.min.js。相对于 Web 服务器的根目录:包含前导 “/” 表示相对于 Web 服务器根目录,例如
/plugin.min.js。相对于 TinyMCE
base_url:不包含前导 “/” 的相对路径,例如../../myplugins/plugin.min.js。默认情况下,base_url是包含 TinyMCE javascript 文件(例如tinymce.min.js)的目录。有关base_url选项的信息,请参阅:Integration and setup options -base_url。
类型: Object
示例:使用 external_plugins
tinymce.init({
selector: 'textarea', // 根据您的 HTML 更改此值
external_plugins: {
'customplugin': 'https://cdn.example.com/customplugin/plugin.min.js',
'advcode': '/<path_to_tinymce-premium>/plugins/advcode/plugin.min.js'
},
plugins: 'customplugin advcode',
// ... 其他配置
});使用 external_plugins 选项从 NPM 使用 premium 插件
当在不进行打包的情况下使用 tinymce-premium 包时,可以使用 external_plugins 选项配置 premium 插件。URL 可以通过三种方式指定:
绝对 URL
如果插件托管在 CDN 或单独的服务器上,请使用绝对 URL:
tinymce.init({
selector: 'textarea',
external_plugins: {
'advcode': 'https://cdn.example.com/tinymce-premium/plugins/advcode/plugin.min.js',
'licensekeymanager': 'https://cdn.example.com/tinymce-premium/plugins/licensekeymanager/plugin.min.js',
'tinycomments': 'https://cdn.example.com/tinymce-premium/plugins/tinycomments/plugin.min.js'
},
plugins: 'advcode tinycomments',
// ... 其他配置
});相对于 Web 服务器根目录
使用前导“/”表示路径相对于 Web 服务器根目录:
tinymce.init({
selector: 'textarea',
external_plugins: {
'advcode': '/node_modules/tinymce-premium/plugins/advcode/plugin.min.js',
'licensekeymanager': '/node_modules/tinymce-premium/plugins/licensekeymanager/plugin.min.js',
'tinycomments': '/node_modules/tinymce-premium/plugins/tinycomments/plugin.min.js'
},
plugins: 'advcode tinycomments',
// ... 其他配置
});这假定
node_modules目录可从您的 Web 服务器访问。在生产环境中,您可能需要将插件文件复制到公共目录。
相对于 TinyMCE base_url
使用相对路径(不带前导“/”)指定相对于 TinyMCE base_url 的插件:
tinymce.init({
selector: 'textarea',
base_url: '/tinymce', // TinyMCE 位置
external_plugins: {
'advcode': 'tinymce-premium/plugins/advcode/plugin.min.js',
'licensekeymanager': 'tinymce-premium/plugins/licensekeymanager/plugin.min.js',
'tinycomments': 'tinymce-premium/plugins/tinycomments/plugin.min.js'
},
plugins: 'advcode tinycomments',
// ... 其他配置
});
在使用商业许可的 premium 插件时,请记得包含
licensekeymanager插件。当您想要懒加载插件或无法进行打包时,
external_plugins选项非常有用。选择最适合您的部署结构的 URL 格式。
对于大多数现代应用程序,建议打包 premium 插件。有关更多信息,请参阅 打包 TinyMCE 插件。
有关 URL 格式和路径解析的更多信息,请参阅
base_url选项。
以只读状态启动编辑器
readonly
将 readonly 选项设置为 true 会以只读模式而不是编辑(设计)模式初始化编辑器。初始化后,可以使用 tinymce.editor.mode.set API 将编辑器切换到设计模式。
类型: Boolean
默认值: false
可能的值: true, false
示例:使用 readonly
tinymce.init({
selector: 'textarea', // 根据您的 HTML 更改此值
readonly: true
});HTML
<script type="text/javascript">
function getEditorStatus (editorId) {
return tinymce.get(editorId).mode.get();
}
function toggleEditorStatus (editorId, currentStatus) {
if (currentStatus === "design") {
tinymce.get(editorId).mode.set("readonly");
} else {
tinymce.get(editorId).mode.set("design");
}
}
function enableDisable (targetEditor, targetElement) {
const status = getEditorStatus(targetEditor);
const button = document.getElementById(targetElement);
toggleEditorStatus(targetEditor, status);
if (status === "design") {
button.innerText = "Enable editor";
} else {
button.innerText = "Disable editor";
}
}
</script>
<textarea id="readonly-demo">Hello, World!</textarea>
<button id="enableDisableButton" class="live_demo" onclick="enableDisable('readonly-demo','enableDisableButton')">Enable editor</button>CSS
.button {
display: inline-block;
min-width: 158px;
height: 45px;
line-height: 45px;
border-radius: 3px;
cursor: pointer;
font-size: 14px;
padding: 0 25px;
text-align: center;
}
.button:active {
transform: translateY(1px);
}
.button-color {
background-color: #1976D2;
}
.button-color:hover {
background-color: #1d6abe;
}
.link-text {
color: #fff;
font-weight: 600;
}JS
tinymce.init({
selector: 'textarea#readonly-demo',
readonly: true,
content_style: 'body { font-family:Helvetica,Arial,sans-serif; font-size:16px }'
});示例:以编程方式切换模式
使用 editor.mode.set() API 在运行时切换 readonly 和 design(可编辑)模式:
const editor = tinymce.activeEditor;
// 切换到只读
editor.mode.set('readonly');
// 切换回可编辑
editor.mode.set('design');在 readonly 模式下的行为
| 行为 | 详情 | 允许 (True/False) |
|---|---|---|
导航和交互 |
| True |
被阻止的操作 |
| False |
工具栏和 UI 行为 |
| False |
启用的功能 | True |
将编辑器设置为禁用状态
disabled
禁用编辑器的所有用户交互(包括光标放置、内容修改、UI 组件)。此选项提供的行为类似于 TinyMCE 7.4.0 中对 readonly 模式所做的更改。启用时,编辑器将完全不可交互。
要以编程方式启用/禁用编辑器,请使用 tinymce.activeEditor.options.set('disabled', false/true)。
类型: Boolean
默认值: false
可能的值: true, false
示例:使用 disabled
tinymce.init({
selector: 'textarea', // 根据需要修改此值
disabled: true
});在编辑器启动(初始化)时执行自定义函数
setup
此选项允许提供一个回调函数,该函数将在 TinyMCE 编辑器实例渲染之前执行。
要指定 setup 回调,请提供一个带有 setup 选项的 JavaScript 函数。此函数应有一个参数,即正在设置的编辑器的引用。
此设置的一个常见用例是将编辑器事件添加到 TinyMCE。例如,如果你想向 TinyMCE 添加点击事件,你可以通过 setup 配置设置来添加它。
类型: Function
示例:使用 setup
tinymce.init({
selector: 'textarea', // 根据需要修改此值
setup: (editor) => {
editor.on('click', () => {
console.log('Editor was clicked');
});
}
});init_instance_callback
此选项允许提供一个函数,该函数将在每次编辑器实例初始化时执行。此函数的格式为 initInstance(editor),其中 editor 是编辑器实例对象的引用。
类型: Function
示例:使用 init_instance_callback
tinymce.init({
selector: 'textarea', // 根据需要修改此值
init_instance_callback: (editor) => {
console.log(`Editor: ${editor.id} is now initialized.`);
}
});您可能还想查看 setup callback 选项,因为它可用于在编辑器实例初始化之前绑定事件。
更改用于加载编辑器的 URL
base_url
此选项允许配置 TinyMCE 的基础 URL。如果 TinyMCE 应从一个位置加载,而主题、模型和插件从另一个位置加载,此选项很有用。
默认情况下,base_url 是包含 TinyMCE JavaScript 文件(例如 tinymce.min.js)的目录。
类型: String
示例:使用 base_url
tinymce.init({
selector: 'textarea', // change this value according to your HTML
base_url: '/my/tinymce/dir'
});cache_suffix
此选项允许在 TinyMCE 加载 CSS、脚本等的每个请求末尾添加自定义缓存破坏 URL 部分。只需添加应附加到每个 URL 请求的查询字符串部分,例如 "?v=4.1.6"。
类型: String
示例:使用 cache_suffix
tinymce.init({
selector: 'textarea', // change this value according to your HTML
cache_suffix: '?v=4.1.6'
});content_security_policy
此选项允许为编辑器的 iframe 内容设置自定义内容安全策略。
类型: String
示例:使用 content_security_policy
tinymce.init({
selector: 'textarea', // change this value according to your HTML
content_security_policy: "default-src 'self'"
});referrer_policy
用于设置加载插件和 CSS 时发送的 referrer 信息级别。Referrer 策略可用于:
提高最终用户的隐私。
协助服务器端过滤 TinyMCE 资源的跨域请求。
类型: String
有关有效的 referrer 策略(指令)列表,请参阅:MDN Web Docs - Referrer-Policy。
示例:使用 referrer_policy
tinymce.init({
selector: 'textarea', // change this value according to your HTML
referrer_policy: 'origin'
});suffix
此选项允许手动提供 TinyMCE 的后缀。默认情况下,此值将设置为与包含 TinyMCE 的脚本的后缀相同。加载主题和插件等内容时,此后缀将插入到所有请求中。例如,使用 tinymce.min.js 文件加载 TinyMCE 将使 TinyMCE 加载其延迟加载的所有内容的 .min 版本,例如 theme.min.js 和 plugin.min.js。suffix 选项可用于覆盖此行为。
类型: String
示例:使用 suffix
tinymce.init({
selector: 'textarea', // change this value according to your HTML
suffix: '.min'
});