Key editor options for adding TinyMCE to an application
Target location for TinyMCE
selector
This option allows a CSS selector to be specified for the areas that TinyMCE should make editable.
When using this option in TinyMCE’s regular editing mode, the element will be replaced with an iframe
that TinyMCE will perform all operations within. When using this option in TinyMCE’s inline editing mode, the selector can be used on any block element and will edit the content in place instead of replacing the element with an iframe
.
For more information on the differences between regular and inline editing modes see Setup inline editing mode.
Type: String
Example: replace all textarea elements on the page
tinymce.init({
selector: 'textarea' // change this value according to your HTML
});
target
Sometimes there might be already a reference to a DOM element at hand, for example when element is created dynamically. In such case initialising editor on it by selector might seem irrational (since selector - id or class should be created first). In such cases you can supply that element directly via target
option.
The selector option has precedence over target , so in order for target to work, do not use the selector option.
|
Type: Node
Adding placeholder content to the editor
Focusing on the editor
Tab order
The tab order of the elements in a page, including TinyMCE, should be configured by setting the tabindex
attribute on the relevant HTML elements. The browser will then natively handle the tab order.
To configure tabindex
for the TinyMCE editor, set the attribute on the target element for the editor.
In iframe (classic editor) mode, TinyMCE will copy the tabindex
attribute from the target element to the editor’s iframe, to allow this to work correctly.
auto_focus
Automatically set the focus to an editor instance. The value of this option should be an editor instance id
. The editor instance id is the id for the original textarea
or div
element that got replaced.
Type: String
custom_ui_selector
Use the custom_ui_selector option to specify the elements that you want TinyMCE to treat as a part of the editor UI. Specifying elements enables the editor not to lose the selection even if the focus is moved to the elements matching this selector. The editor blur
event is not fired if the focus is moved to elements matching this selector since it’s treated as part of the editor UI.
Type: String
highlight_on_focus
This feature is only available for TinyMCE 6.4 and later. |
In TinyMCE 7.0, the default setting for highlight_on_focus was changed from false to true . Any editors using this highlight_on_focus: true option in TinyMCE , can remove this option from their TinyMCE init configuration when upgrading to TinyMCE 7.0.
|
The highlight_on_focus
option adds a blue outline to an instantiated TinyMCE editor when that editor is made the input focus. When using the oxide-dark
skin, the outline is white.
This allows users to clearly see when the editor is in focus, or which editor has focus if more than one TinyMCE instance is available.
Type: Boolean
Default value: true
Possible values: true
, false
Example: using highlight_on_focus
tinymce.init({
selector: "textarea",
highlight_on_focus: false
});
Using highlight_on_focus
with custom skins
If a custom skin is being used, two variables can be updated to match the highlight_on_focus
option’s appearance with the custom skin.
The two rules and their default values are:
@edit-area-border-color: #2D6ADF;
@edit-area-border-width: 2px;
This is entirely optional. If the default values are not changed, the highlight_on_focus option works with a custom skin exactly as it does with TinyMCE default skins.
|
Extend TinyMCE with plugins
There are two options for adding plugins to TinyMCE: plugins
and external_plugins
. Tiny recommends using the plugins
option for plugins bundled with the product or included in your cloud subscription. Custom or third-party plugins should be included using the external_plugins
option to simplify updating and upgrading TinyMCE.
plugins
This option allows configuring which plugins TinyMCE will attempt to load when starting up. By default, TinyMCE will not load any plugins.
The plugins can be provided as either:
-
A string of space or comma separated plugin names, such as
'plugin1 plugin2'
, or -
An array of plugin names, such as
[ 'plugin1' , `plugin2' ]
Type: String
or Array
Example: using plugins
with a string
tinymce.init({
selector: 'textarea', // change this value according to your HTML
plugins: 'advlist autolink link image lists charmap preview'
});
external_plugins
This option allows a URL based location of plugins to be provided that are outside of the normal TinyMCE plugins directory.
TinyMCE will attempt to load these as per regular plugins when starting up. This option is useful when loading TinyMCE from a CDN or when the TinyMCE directory is separate from custom plugins.
This value should be set as a JavaScript object that contains a property for each TinyMCE plugin to be loaded. This property should be named after the plugin and should have a value that contains the location that the plugin that will be loaded from.
The URLs provided can be:
-
Absolute URLs: Including the protocol, such as
https://www.example.com/plugin.min.js
. -
Relative to the root directory of the web-server: Including the leading “/” to indicate that it is relative to the web-server root, such as
/plugin.min.js
. -
Relative to the TinyMCE
base_url
: A relative path without the leading “/”, such as../../myplugins/plugin.min.js
. By default, thebase_url
is the directory containing TinyMCE javascript file (such astinymce.min.js
). For information on thebase_url
option, see: Integration and setup options -base_url
.
Type: Object
Starting the editor in a read-only state
readonly
Setting the readonly
option to true
initializes the editor in readonly mode instead of editing (design) mode. Once initialized, the editor can be switched to design mode using the tinymce.editor.mode.set
API.
Type: Boolean
Default value: false
Possible values: true
, false
Example: Using readonly
tinymce.init({
selector: 'textarea', // change this value according to your HTML
readonly: true
});
-
TinyMCE
-
HTML
-
CSS
-
JS
-
Edit on CodePen
<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>
.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;
}
tinymce.init({
selector: 'textarea#readonly-demo',
readonly: true,
content_style: 'body { font-family:Helvetica,Arial,sans-serif; font-size:16px }'
});
Behavior in readonly
mode
Behavior | Details | Allowed (True/False) |
---|---|---|
Navigation and Interaction |
|
True |
Prevented Actions |
|
False |
Toolbar and UI Behavior |
|
False |
Enabled Features |
|
True |
Setting the editor in a disabled state
disabled
Disables all user interactions with the editor (including cursor placement, content modifications, UI components). This option provides behavior similar to the changes made to TinyMCE in 7.4.0 readonly mode. When enabled, the editor becomes completely non-interactive.
To programmatically enable/disable the editor, use tinymce.activeEditor.options.set('disabled', false/true)
.
Type: Boolean
Default value: false
Possible values: true
, false
Executing custom functions while the editor starts (initializes)
setup
This option allows a callback to be provided that will be executed before the TinyMCE editor instance is rendered.
To specify a setup callback, provide the setup
option with a JavaScript function. This function should have one argument, which is a reference to the editor that is being set up.
A common use case for this setting is to add editor events to TinyMCE. For instance, if you would like to add a click event to TinyMCE, you would add it through the setup configuration setting.
Type: Function
init_instance_callback
This option allows a function to be provided that will be executed each time an editor instance is initialized. The format of this function is initInstance(editor)
where editor
is the editor instance object reference.
Type: Function
Example: using init_instance_callback
tinymce.init({
selector: 'textarea', // change this value according to your HTML
init_instance_callback: (editor) => {
console.log(`Editor: ${editor.id} is now initialized.`);
}
});
You may also want to take a look at the setup callback option as it can be used to bind events before the editor instance is initialized.
Changing URL used to load the editor
base_url
This option allows the base URL for TinyMCE to be configured. This is useful if TinyMCE should be loaded from one location while the theme, model and plugins are loaded from another.
By default, the base_url
is the directory containing TinyMCE javascript file (such as tinymce.min.js
).
Type: String
cache_suffix
This option allows a custom cache buster URL part to be added at the end of each request TinyMCE makes to load CSS, scripts, etc. Just add the query string part that should be appended to each URL request, for example "?v=4.1.6".
Type: String
content_security_policy
This option allows a custom content security policy to be set for the editor’s iframe contents.
Type: String
referrer_policy
Used for setting the level of referrer information sent when loading plugins and CSS. Referrer policies can be used to:
-
Improve the privacy of end-users.
-
Assist with server-side filtering of cross-origin requests for TinyMCE resources.
Type: String
For a list of valid referrer policies (directives), see: MDN Web Docs - Referrer-Policy.
suffix
This option allows the suffix of TinyMCE to be manually provided. By default this value will be set to the same as the suffix of the script holding TinyMCE. When loading things like the theme and plugins this suffix will be inserted into all requests. For example, loading TinyMCE with a tinymce.min.js
file will make TinyMCE load .min
versions of everything it lazy-loads, like theme.min.js
and plugin.min.js
The suffix option is useful for overriding this behaviour.
Type: String