⚠️️️ CKEditor 4 (the open source edition) is no longer maintained. ⚠️
If you would like to keep access to future CKEditor 4 security patches, check the Extended Support Model, which guarantees security updates and critical bug fixes until December 2026. Alternatively, upgrade to CKEditor 5.
⚠️️️ Please note that this release is a part of CKEditor 4 Extended Support Model, only available to customers who decided to acquire the LTS (Long Term Support) version of the editor. All editor versions below 4.24.0-lts can no longer be considered as secure! ⚠️
Security Updates:
Fixed cross-site scripting (XSS) vulnerability caused by incorrect CDATA detection reported by Michal Frýba, ALEF NULA.
Issue summary: The vulnerability allowed to inject malformed HTML content bypassing Advanced Content Filtering mechanism, which could result in executing JavaScript code. See GHA for more details.
Fixed cross-site scripting (XSS) vulnerability in AJAX sample reported by Rafael Pedrero, see INCIBE report.
Issue summary: The vulnerability allowed to execute JavaScript code by abusing the AJAX sample. See GHA for more details.
Cross-site scripting (XSS) vulnerability in samples with enabled the preview feature reported by Marcin Wyczechowski & Michał Majchrowicz AFINE Team.
Issue summary: The vulnerability allowed to execute JavaScript code by abusing the misconfigured preview feature. See GHA for more details.
You can read more details in the relevant security advisories. Contact us if you have more questions.
An upgrade is highly recommended!
Fixed Issues:
This release introduces the LTS (”Long Term Support”) version of the editor, available under commercial terms ("Extended Support Model").
If you acquired the Extended Support Model for CKEditor 4 LTS, please read the CKEditor 4 LTS key activation guide.
⚠️ This is the last open source release of CKEditor 4. As announced in 2018, CKEditor 4 has reached its End of Life in June 2023.
New Features:
config.styleSet
configuration option.config.versionCheck
configuration option to learn more.Fixed Issues:
Other Changes:
Note: CKEditor 4.22.1 has been released immediately after 4.22.0 to fix the README issues on npm and contains no changes vs 4.22.0.
Security Updates:
A cross-site scripting vulnerability has been discovered affecting Iframe Dialog and Media Embed plugins.
This vulnerability might affect a small percentage of integrators that depend on dynamic editor initialization/destroy mechanism. See GitHub advisory for more details.
Potential breaking changes
In some rare cases, a security release may introduce a breaking change to your application. We have provided configuration options that will help you mitigate any potential issues with the upgrade:
sandbox
attribute by default, which restricts JavaScript code execution in the iframe element. To change this behavior, configure the config.iframe_attributes
option.config.embed_keepOriginalContent
option.If you choose to change either of the above options, make sure to properly configure Content Security Policy to avoid any potential security issues that may arise from embedding iframe elements on your web page.
You can read more details in the relevant security advisory and contact us if you have more questions.
An upgrade is highly recommended!
New Features:
config.uploadImage_supportedTypes
configuration option allowing to change the image formats accepted by the Upload Image plugin. Thanks to SilverYoCha!Fixed Issues:
Fixed Issues:
popstate
and hashchange
events on the window
, added by the Maximize plugin, were not removed when destroying the editor instance.change
event upon finishing upload, resulting in passing incorrect data in form controls for integration frameworks, like Reactive forms in Angular.API changes:
colorButton_contentsCss
configuration option allowing to add custom CSS to the Color Button menu content. Thanks to mihilion!Fixed Issues:
config.baseFloatZIndex
config variable is incorrectly applied to parent dialog when the child dialog is closed resulting in the dialog overlay covering up the dialog. Thanks to JenoDK!New Features:
config.tabletools_scopedHeaders
configuration option controlling the behaviour of table headers with and without the [scope]
attribute.config.image2_defaultLockRatio
configuration option allowing to set the default value of the "Lock ratio" option in the Enhanced Image dialog.configDefinition.followingSpace
option for the mentions plugin, andconfig.emoji_followingSpace
option for the emoji plugin.config.coreStyles_toggleSubSup
configuration option which disallows setting the subscript and superscript on the same element simultaneously using UI buttons. This option is turned off by default.Fixed Issues:
config.autolink_urlRegex
option produced invalid links when configured directly using the editor instance config. Thanks to Aigars Zeiza!entities_processNumerical = true
configuration option.API changes:
config.removeButtons
config variable.followingSpace
option that finishes an accepted match with a space.Fixed Issues:
backspace
key removes the editor editable area and crashes the editor.checkbox.setValue
and radio.setValue
methods are not chainable as stated in the documentation. Thanks to Jordan Bradford!CKEDITOR.tools#convertToPx()
gives invalid results if the helper calculator element was deleted from the DOM.dialog.validate#functions
incorrectly composes functions that return an optional error message, like e.g. dialog.validate.number
due to unnecessary return type coercion.Enter
key.API changes:
config.editorplaceholder_delay
configuration option allowing to delay placeholder before it is toggled when changing editor content.CKEDITOR.tools#debounce()
function allowing to postpone a passed function execution until the given milliseconds have elapsed since the last time it was invoked.New features:
CKEDITOR.replace
, CKEDITOR.inline
, CKEDITOR.appendTo
).config.shiftLineBreaks
allowing to preserve inline elements formatting when the shift
+enter
keystroke is used.config.applicationTitle
configuration option allowing to customize or disable the editor's application region label. This option, combined with config.title
, gives much better control over the editor's labels read by screen readers.Fixed Issues:
tab
key behavior is inconsistent after adding a new row.use strict
directives in a core editor module.jpg
, gif
, png
, not respecting supported types by the Upload Widget plugin.API changes:
CKEDITOR.replace
, CKEDITOR.inline
, CKEDITOR.appendTo
functions are now returning a handle function allowing to cancel the Delayed Editor Creation feature.config.applicationTitle
alongside CKEDITOR.editor#applicationTitle
to allow customizing editor's application region label.Security Updates:
Fixed an XSS vulnerability in the core module reported by GitHub Security Lab team member Kevin Backhouse.
Issue summary: The vulnerability allowed to inject malformed HTML bypassing content sanitization, which could result in executing a JavaScript code. See CVE-2022-24728 for more details.
Fixed a Regular expression Denial of Service (ReDoS) vulnerability in dialog plugin discovered by the CKEditor 4 team during our regular security audit.
Issue summary: The vulnerability allowed to abuse a dialog input validator regular expression, which could cause a significant performance drop resulting in a browser tab freeze. See CVE-2022-24729 for more details.
You can read more details in the relevant security advisory and contact us if you have more questions.
An upgrade is highly recommended!
Highlights:
Web Spell Checker ended support for WebSpellChecker Dialog on December 31st, 2021. This means the plugin is not supported any longer. Therefore, we decided to deprecate and remove the WebSpellChecker Dialog plugin from CKEditor 4 presets.
We strongly encourage everyone to choose one of the other available spellchecking solutions - Spell Check As You Type (SCAYT) or WProofreader.
Fixed issues:
CKEDITOR.tools.convertToPx()
.select
elements with multiple
attribute had incorrect styling. Thanks to John R. D'Orazio!Other changes:
CKEDITOR.rnd
property to discourage using it in a security-sensitive context.config.emoji_emojiListUrl
configuration option.Fixed issues:
MutationObserver
used in IFrame Editing Area plugin causes memory leaks.API changes:
config.useComputedState
default value to true
. Thanks to Shabab Karim!CKEDITOR.appendTimestamp()
function was added.CKEDITOR.dom.document#appendStyleSheet()
and CKEDITOR.tools.buildStyleHtml()
now use the newly added CKEDITOR.appendTimestamp()
function to correctly handle caching of CSS files.Other changes:
Highlights:
Due to a regression in CKEeditor 4.17.0 version that was only revealed after the release and affected a limited area of operation, CSS assets loaded via relative links started to point into invalid location when loaded from external resources.
We have therefore decided to immediately release CKEditor 4.17.1 that fixed this problem. If you have already upgraded to v4.17.0, make sure to upgrade to v4.17.1 to avoid this regression.
Fixed issues:
Security Updates:
Fixed XSS vulnerability in the core module reported by William Bowling.
Issue summary: The vulnerability allowed to inject malformed comments HTML bypassing content sanitization, which could result in executing JavaScript code. See CVE-2021-41165 for more details.
Fixed XSS vulnerability in the core module reported by Maurice Dauer.
Issue summary: The vulnerability allowed to inject malformed HTML bypassing content sanitization, which could result in executing JavaScript code. See CVE-2021-41164 for more details.
You can read more details in the relevant security advisory and contact us if you have more questions.
An upgrade is highly recommended!
Highlights:
Adobe ended support of Flash Player on December 31, 2020 and blocked Flash content from running in Flash Player beginning January 12, 2021. We have decided to deprecate and remove the Flash plugin from CKEditor 4 to help protect users' systems and discourage using insecure software.
New Features:
*
) symbol.config.clipboard_handleImages
configuration option for enabling and disabling built-in support for pasting and dropping images in the Clipboard plugin. Thanks to FlowIT-JIT!editor#title
property for the title of the preview window. Thanks to Ely!Fixed Issues:
CKEDITOR.tools.color
.CKEDITOR.tools.color
.CKEDITOR.plugins.clipboard.dataTransfer#getTypes()
returns no types.CKEDITOR.dialog#setState()
method throws error when there is no "OK" button in the dialog.&
characters when pasting links into the editor.ENTER_BR
enter mode crashes the editor.API Changes:
CKEDITOR.editor#getSelection()
now returns null
if the editor is in recreating state.CKEDITOR.tools.color
.CKEDITOR.plugins.clipboard.dataTransfer#isFileTransfer()
method.callback
parameter to CKEDITOR.plugins.preview#createPreview()
method.Other Changes:
Security Updates:
Fixed XSS vulnerability in the Clipboard plugin reported by Anton Subbotin.
Issue summary: The vulnerability allowed to abuse paste functionality using malformed HTML, which could result in injecting arbitrary HTML into the editor. See CVE-2021-32809 for more details.
Fixed XSS vulnerability in the Widget plugin reported by Anton Subbotin.
Issue summary: The vulnerability allowed to abuse undo functionality using malformed Widget HTML, which could result in executing JavaScript code. See CVE-2021-32808 for more details.
Fixed XSS vulnerability in the Fake Objects plugin reported by Mika Kulmala.
Issue summary: The vulnerability allowed to inject malformed Fake Objects HTML, which could result in executing JavaScript code. See CVE-2021-37695 for more details.
You can read more details in the relevant security advisory and contact us if you have more questions.
An upgrade is highly recommended!
Fixed Issues:
character appears in the editor instead of a space.TypeError
is thrown when switching to Source View and back while Autocomplete plugin is enabled.Fixed Issues:
div
Enter mode.false
is treated as an event cancellation.CKEDITOR.htmlParser
does not treat --!>
as a comment end tag correctly.Security Updates:
Fixed ReDoS vulnerability in the Autolink plugin.
Issue summary: It was possible to execute a ReDoS-type attack inside CKEditor 4 by persuading a victim to paste a specially crafted URL-like text into the editor and press Enter or Space.
Fixed ReDoS vulnerability in the Advanced Tab for Dialogs plugin.
Issue summary: It was possible to execute a ReDoS-type attack inside CKEditor 4 by persuading a victim to paste a specially crafted text into the Styles dialog.
An upgrade is highly recommended!
New Features:
tabindex
attribute. Thanks to Timo Kirkkala!Fixed Issues:
config.fullPage
enabled when there is no <body>
tag in the editor content.config.width
value.API Changes:
CKEDITOR.tools.color
class which adds colors validation and methods for converting colors between various formats: named colors, HEX, RGB, RGBA, HSL and HSLA.CKEDITOR.plugins.pastetools.filters.word.images
filters to the CKEDITOR.plugins.pastetools.filters.image
namespace.CKEDITOR.plugins.pastetools.filters
are now available under the CKEDITOR.pasteTools
alias.CKEDITOR.ajax
specialized loading methods for loading binary (CKEDITOR.ajax.loadBinary()
) and text (CKEDITOR.ajax.loadText()
) data.Other Changes:
extraPlugins
configuration option.Security Updates:
Fixed XSS vulnerability in the Color History feature reported by Mark Wade.
Issue summary: It was possible to execute an XSS-type attack inside CKEditor 4 by persuading a victim to paste a specially crafted HTML code into the Color Button dialog.
An upgrade is highly recommended!
Fixed Issues:
CKEDITOR.inlineAll()
method tries to initialize inline editor also on elements with an editor already attached to them.CKEDITOR.domReady()
method connected with not removing load
event listeners. Thanks to rohit1!auto
or 0
value is used.0
on editor resize.API Changes:
stylesRemove
editor event.Other Changes:
stylesLoaded
variable. Thanks to Levi Carter!1.0.1
version:
New features:
colorName
property for customizing foreground and background styles in the Color Button plugin via the config.colorButton_foreStyle
and config.colorButton_backStyle
configuration options.Fixed Issues:
config.dataIndentationChars
configuration option to an empty string is ignored and replaced by a tab (\t
) character. Thanks to Thomas Grinderslev!selection.scrollIntoView
method throws an error when the editor selection is not set.<select>
element inside the editor.Fixed Issues:
config.readOnly
configuration option not considered for startup read-only mode of inline editor.config.autolink_urlRegex
and config.autolink_emailRegex
options are not customizable. Thanks to Sergiy Dobrovolsky!editor.resize()
method does not work with CSS units.Other Changes:
Security Updates:
Fixed XSS vulnerability in the HTML data processor reported by Michał Bentkowski of Securitum.
Issue summary: It was possible to execute XSS inside CKEditor after persuading the victim to: (i) switch CKEditor to source mode, then (ii) paste a specially crafted HTML code, prepared by the attacker, into the opened CKEditor source area, and (iii) switch back to WYSIWYG mode or (i) copy the specially crafted HTML code, prepared by the attacker and (ii) paste it into CKEditor in WYSIWYG mode.
Fixed XSS vulnerability in the WebSpellChecker Dialog plugin reported by Pham Van Khanh from Viettel Cyber Security.
Issue summary: It was possible to execute XSS using CKEditor after persuading the victim to: (i) switch CKEditor to source mode, then (ii) paste a specially crafted HTML code, prepared by the attacker, into the opened CKEditor source area, then (iii) switch back to WYSIWYG mode, and (iv) preview CKEditor content outside CKEditor editable area.
An upgrade is highly recommended!
New features:
aria-selected="true"
attribute.widget.getClipboardHtml()
support for dragging and dropping multiple widgets.Fixed Issues:
editor.extractSelectedHtml()
method after selecting all content.<span>
tags when reapplying the same font multiple times.API Changes:
textColor
and bgColor
commands that apply the selected color chosen by the Color Button plugin.font
and fontSize
commands that apply the selected font style chosen by the Font plugin.editor.getSelectedRanges()
alias.Fixed Issues:
@
.CKEDITOR.htmlParser.filter
.CKEDITOR.plugins.widget.repository#selected
after selecting the whole editor content.API Changes:
CKEDITOR.plugins.clipboard.dataTransfer#getTypes()
method.New Features:
<span>
element containing just one word creates a correct selection including the clicked <span>
only.config.linkDefaultProtocol
configuration option that allows setting the default URL protocol for the Link plugin dialog.CKEDITOR.plugins.widget#mask
property to allow masking only the specified part of a widget.widgetDefinition.getClipboardHtml()
method to customize the widget HTML during copy, cut and drag operations.Fixed Issues:
CKEDITOR.dom.range#_getTableElement()
returns null
instead of a table element for edge cases.CKEDITOR.tools.promise
initializes incorrectly if an AMD loader is present.CKEDITOR.editor#getData()
call when inserting content into the editor.CKEDITOR.tools.object.keys()
method does not accept non-objects.API Changes:
CKEDITOR.tools.array.some()
method.CKEDITOR.plugins.undo.UndoManager.addFilterRule()
method that allows filtering undo snapshot contents.CKEDITOR.tools.normalizeMouseButton()
method.CKEDITOR.dom.element#fireEventHandler()
method.CKEDITOR.tools.bind()
method to accept arguments for bound functions.CKEDITOR.dom.text#isEmpty()
method.CKEDITOR.plugins.dialog.getModel()
and CKEDITOR.plugins.dialog.getMode()
methods with their CKEDITOR.plugin.definition
counterparts, allowing to get the dialog subject of a change.CKEDITOR.dom.element#isDetached()
method.Fixed Issues:
New Features:
CKEDITOR.config.image2_maxSize
configuration option for the Enhanced Image plugin that allows setting a maximum size that an image can be resized to with the resizer.Fixed Issues:
config.colorButton_colors
configuration option in the form of a label or code do not work correctly.windowtext
color is not correctly recognized by the CKEDITOR.tools.style.parse
methods.CKEDITOR.tools.extend()
method does not work with the DontEnum
object property attribute.editor.insertHtml()
, editor.insertHtmlIntoRange()
, editor.insertElement()
and editor.insertElementIntoRange()
) pollute the editable with empty <span>
elements.config.enterMode
set to ENTER_DIV
alters pasted content.API Changes:
CKEDITOR.ui.balloonToolbar.reposition()
and CKEDITOR.ui.balloonToolbarView.reposition()
methods.CKEDITOR.dom.documentFragment.find()
and CKEDITOR.dom.documentFragment.findOne()
methods.CKEDITOR.tools.array.find()
method.CKEDITOR.tools.object.keys()
method.CKEDITOR.tools.object.entries()
method.CKEDITOR.tools.object.values()
method.CKEDITOR.template#source
property can now be a function, so it can return the changed template values during the runtime. Thanks to Jacek Pulit!CKEDITOR.plugins.pagebreak.createElement()
method allowing to create a Page Break plugin CKEDITOR.dom.element
instance.CKEDITOR.htmlParser.element.findOne()
method.CKEDITOR.config.pasteFromWord_keepZeroMargins
configuration option that allows for keeping any margin-*: 0
style that would be otherwise removed when pasting content with the Paste from Word plugin.CKEDITOR.tools.promise
class.CKEDITOR.tools.style.border
object wrapping CSS border style helpers under a single type.data-cke-tableselection-ignored
attribute.pluginDefinition.isSupportedEnvironment()
method.Other Changes:
arguments.callee
calls with named function expressions to allow the editor to work in strict mode.CKEDITOR.tools.style.parse.border()
as deprecated in favor of the CKEDITOR.tools.style.border.fromCssRule()
method.CKEDITOR.tools.objectKeys()
as deprecated in favor of the CKEDITOR.tools.object.keys()
method.Fixed Issues:
Other Changes:
CKEDITOR.getUrl()
when referencing style sheets.CKEDITOR.getUrl()
when referencing style sheets.sl_SL
) language does not work.U+2019
(Right single quotation mark) are considered separators.Fixed Issues:
config.allowedContent
.Fixed Issues:
<figure>
tag with an image
class is upcasted.getValue()
function is defined in the global scope.Other Changes:
package.json
file.Fixed Issues:
Security Updates:
Fixed XSS vulnerability in the HTML parser reported by maxarr.
Issue summary: It was possible to execute XSS inside CKEditor after persuading the victim to: (i) switch CKEditor to source mode, then (ii) paste a specially crafted HTML code, prepared by the attacker, into the opened CKEditor source area, and (iii) switch back to WYSIWYG mode.
An upgrade is highly recommended!
New Features:
aria-haspopup
property values. The Menu Button aria-haspopup
value is now menu
, the Panel Button and Rich Combo aria-haspopup
value is now listbox
.contextmenu_contentsCss
configuration option to allow adding custom CSS to the Context Menu.Fixed Issues:
required
attribute is not correctly recognized by the Form Elements plugin dialog. Thanks to Roli Züger!Permission denied
is thrown when opening a Panel instance.config.forceSimpleAmpersand
option does not work. Thanks to Alex Maris!Escape HTML Entities
] plugin with custom additional entities configuration breaks HTML escaping.(Selected)
text at the end of the label when clicked.onAbort
method of the Upload Widget is not called when the loader is aborted.CKEDITOR.filter.instances
is causing memory leaks.API Changes:
CKEDITOR.ui.panel.block.getItems
method now also returns input
elements in addition to links.CKEDITOR.tools.convertToPx
function now converts negative values.insert
method now passes editor
and commandData
. Thanks to marcparmet!tools.eventsBuffer
and tools.throttle
functions logic into a separate namespace.
tools.eventsBuffer
was extracted into tools.buffers.event
,tools.throttle
was extracted into tools.buffers.throttle
.CKEDITOR.filter
constructor accepts an additional rules
parameter allowing to bind the editor and filter together.editor.getCommandKeystroke
method accepts an additional all
parameter allowing to retrieve an array of all command keystrokes.hasArrow
definition option can by identified by the .cke_button_expandable
CSS class.Other Changes:
Fixed Issues:
instanceReady
.editor.destroy()
during the file upload throws an error. Thanks to Maksim Makarevich!id
attribute. Thanks to Nathan Samson!<font>
tag is not preserved when proper configuration is provided and a style is applied by the Font plugin.object
, embed
, param
are removed from the editor content.API Changes:
editor.plugins.detectConflict()
method finding conflicts between provided plugins.New Features:
CKEDITOR.dom.range
for matching text.Fixed Issues:
CKEDITOR.dialog.definition.onHide
API documentation. Thanks to sunnyone!\u3000
) is lost when pasting text.config.forcePasteAsPlainText
option is not respected in internal and cross-editor pasting.API Changes:
replace
dialog from the Find / Replace plugin with a tabId
option in the find
command.CKEDITOR.editor.addCommand()
method can now accept a CKEDITOR.command
instance as a parameter.extraPlugins
, removePlugins
and plugins
configuration options allow whitespace.extraPlugins
, removePlugins
and plugins
configuration options allow passing plugin names as an array.getClientRect()
function allowing to retrieve an absolute bounding rectangle of the element, i.e. a position relative to the upper-left corner of the topmost viewport.getClientRects()
method to CKEDITOR.dom.range
. It returns a list of rectangles for each selected element.CKEDITOR.tools.throttle()
function.Other Changes:
gv_GB
) and Interlingua (ia_XR
).alt
attribute for the logo image in the About tab of SCAYT.Security Updates:
Fixed XSS vulnerability in the Enhanced Image (image2
) plugin reported by Kyaw Min Thein.
Issue summary: It was possible to execute XSS inside CKEditor using the <img>
tag and specially crafted HTML. Please note that the default presets (Basic/Standard/Full) do not include this plugin, so you are only at risk if you made a custom build and enabled this plugin.
We would like to thank the Drupal security team for bringing this matter to our attention and coordinating the fix and release process!
Fixed Issues:
New Features:
config.fileTools_requestHeaders
configuration option.CKEDITOR.config.startupFocus
as start
or end
to specify where the editor focus should be after the initialization.data-cke-magic-line="1"
attribute.Fixed Issues:
contextDefinition.cssSelector
matcher.change
event.config.forcePasteAsPlainText
option.border
shorthand property was incorrectly expanded ignoring the border-color
style.API Changes:
pluginDefinition.init()
method of the requiring plugin.Other Changes:
scayt_minWordLength
configuration option now defaults to 3 instead of 4.localStorage
is disabled.Unable to get property type of undefined or null reference
error in the browser console when SCAYT is disabled/enabled.You already have the dictionary
error.'
on the replacement make the WSC dialog inaccessible.Uncaught TypeError
error in the browser console.Important Notes:
config.imageUploadUrl
property.New Features:
#
) if needed. It ensures a valid Hex color value is used when setting the table cell border or background color with the Color Dialog window.CKEDITOR.tools.keystrokeToArray()
method. It converts a keystroke into its string representation, returning every key name as a separate array element.CKEDITOR.tools.object.merge()
method. It allows to merge two objects, returning the new object with all properties from both objects deeply cloned.CKEDITOR.tools.array.every()
method. It invokes a given test function on every array element and returns true
if all elements pass the test.Fixed Issues:
CKEDITOR.focusManager.focus()
API documentation. Thanks to benjy!config.colorButton_colors
option are not correctly highlighted in the Color Button Text Color or Background Color panel.upcast
methods are called for every element.uploadWidgetDefinition
.config.skin
is loaded using a custom path.API Changes:
upcast
methods are now called in the widget definition's context.show
option in the balloonPanel.attach()
method, allowing to attach a hidden Balloon Panel instance.skipNotifications
option to the CKEDITOR.fileTools.uploadWidgetDefinition
, allowing to switch off default notifications displayed by upload widgets.Other Changes:
New Features:
CKEDITOR.filter.disallowedContent
property.Fixed Issues:
change
event not fired when typing the first character after pasting into the editor. Thanks to Daniel Miller!border
shorthand property with zero width (border: 0px solid #000;
) causes the table to have the border attribute set to 1.CKEDITOR.config.enterMode
is set to CKEDITOR.ENTER_BR
.Other Changes:
CKEDITOR.dom.selection.isCollapsed()
method which is a simpler way to check if the selection is collapsed.CKEDITOR.dialogCommand
.New Features:
Fixed Issues:
Uncaught TypeError: element.is is not a function
error.cke_table-faked-selection-table
class is visible in the Stylesheet Classes field of the Table Properties dialog.range.cloneContents()
method selects the whole element when the selection starts at the beginning of that element.range.extractContents()
method returns an incorrect result when multiple nodes are selected.elementPath.contains()
method incorrectly excludes the last element instead of root when the fromTop
parameter is set to true
.Other Changes:
CKEDITOR.dom.nodeList.toArray()
method which returns an array representation of a node list.New Features:
Fixed Issues:
editor.getCommandKeystroke()
method does not obtain the correct keystroke.CKEDITOR.filter
incorrectly transforms the margin
CSS property.Important Notes:
embed_provider
configuration option for the Media Embed and Semantic Media Embed plugins is no longer preset by default.YUI 2.7.0
library which has some known vulnerabilities (it's a security precaution, there was no security issue in CKEditor due to the way it was used).New Features:
CKEDITOR.template
removed. CKEditor can now be used without the unsafe-eval
Content Security Policy. Thanks to Caridy Patiño!background
property containing also other styles for table cells in the Table Tools plugin.config.enableContextMenu
configuration option for enabling and disabling the context menu.command
parameter in CKEDITOR.editor.getCommandKeystroke()
now also accepts a command name as an argument.CKEDITOR.dom.range.shrink()
method now allows for skipping bogus <br>
elements.Fixed Issues:
<span>
elements with height
style stacked when pasting from Word.<div>
elements with a <div>
.CKEDITOR.getCss()
API documentation. Thanks to knusperpixel!src
/srcdoc
attributes of the <iframe>
element in a CKEditor setup with ACF turned off and without the Iframe Dialog plugin. The issue was originally reported as a security issue by Sriramk21 from Pegasystems and was later downgraded by the security team into a normal issue due to the requirement of having ACF turned off. Disabling Advanced Content Filter is against security best practices, so the problem described above has not been considered a security issue as such.Other Changes:
cdn.mathjax.org
to cdnjs, due to closing of cdn.mathjax.org
scheduled for April 30, 2017.New Features:
config.colorButton_colorsPerRow
configuration option for setting the number of rows in the color selector.Fixed Issues:
config.pasteFromWord_heuristicsEdgeList
configuration option.element.setSize()
sets incorrect editor dimensions if the border width is represented as a fraction of pixels.<div>
-based editor.New Features:
callback
parameter in the CKEDITOR.ajax.post()
method became optional.Fixed Issues:
background
property if it only contains a color value. This fixes missing background colors when using Paste from Word.New Features:
config.pasteFromWordRemoveFontStyles
option now defaults to false
. This option will be deprecated in the future. Use Advanced Content Filter to replicate the effect of setting it to true
.config.pasteFromWordNumberedHeadingToList
and config.pasteFromWordRemoveStyles
options were dropped and no longer have any effect on pasted content.uploaded.width/height
if set.download
attribute in link (<a>
) elements. Selecting the "Force Download" checkbox in the Link dialog will cause the linked file to be downloaded automatically. Thanks to sbusse!additionalRequestParameters
property for file uploads to make it possible to send additional information about the uploaded file to the server.config.image2_altRequired
option for the Enhanced Image plugin to allow making alternative text a mandatory field. Thanks to Andrey Fedoseev!Fixed Issues:
mso-list: ignore
style is not handled properly when pasting from Word.<li>
element after pasting from Word.<span>
elements in Paste from Word content cleanup breaking content formatting.config.enterMode
set to CKEDITOR.ENTER_BR
.color:windowtext
style.config.pasteFromWordRemoveFontStyles
is ignored under certain conditions.Other Changes:
<div>
element.Security Updates:
[Severity: minor] Fixed the target="_blank"
vulnerability reported by James Gaskell.
Issue summary: If a victim had access to a spoofed version of ckeditor.com via HTTP (e.g. due to DNS spoofing, using a hacked public network or mailicious hotspot), then when using a link to the ckeditor.com website it was possible for the attacker to change the current URL of the opening page, even if the opening page was protected with SSL.
An upgrade is recommended.
New Features:
target
attribute.Fixed Issues:
<div>
-based editor.setActive()
method.Fixed Issues:
font-style
family property correctly, removing quotes and whitespace from font names.config.autoGrow_onStartup
option set to true
does not work properly for an editor that is not visible.onerror
and onload
events are not used in browsers it could have been used when loading scripts dynamically.Fixed Issues:
min-height
style for the <body>
element and the height
style for the <html>
element breaks the Auto Grow plugin.<iframe>
element.dom.element.removeAttribute()
method does not remove all attributes if no parameter is given.CKEDITOR.style
instance with the styles
property by CKEDITOR.filter
.New Features:
config.colorButton_enableAutomatic
option to allow hiding the "Automatic" option in the color picker.Fixed Issues:
New Features:
Fixed Issues:
IndexSizeError
when using the Div Editing Area and Content Templates plugins.editor.getData()
fails when the cursor is next to an <hr>
tag.editor.getData()
throw an error when an image is the only data in the editor.New Features:
CKEDITOR.tools.getCookie()
and CKEDITOR.tools.setCookie()
methods for accessing cookies.CKEDITOR.tools.getCsrfToken()
method. The CSRF token is now automatically sent by the File Browser and File Tools plugins during file uploads. The server-side upload handlers may check it and use it to additionally secure the communication.Other Changes:
Fixed Issues:
target
attribute value. Thanks to SamZiemer!undefined
string is appended to an email address added with the Link plugin if subject and email body are empty and config.emailProtection
is set to encode
.<iframe>
after the editor was detached from DOM. Thanks to Stefan Rijnhart!classList
polyfill is used.editor.drop
event.background-image
path needs single quotes around the URL value.contents.css
style is not used if the IFrame Editing Area plugin is missing.isContentEditable
property of an <input>
DOM element.Other Changes:
bender.tools.createTestsForEditors
will also receive editor bot as a second parameter.New Features:
Fixed Issues:
onChange
does not work. Thanks to Iliya Kostadinov!<div>
element.<body>
element is not handled correctly.<h1-6>
element to be a child of the <summary>
element.name
attribute.Other Changes:
CKEDITOR.env.mobile
as deprecated. The reason is that it is no longer clear what "mobile" means.New Features:
config.fileTools_defaultFileName
option to allow setting a default file name for paste uploads.Fixed Issues:
editor.getSelectedHtml()
method returns invalid results for entire content selection.Other Changes:
Fixed Issues:
<textarea>
element storing editor configuration in the toolbar configurator.CKEDITOR.plugins.clipboard.isHtmlInExternalDataTransfer
property as the check must be dynamic.DataTransfer.getData()
should work consistently in all browsers and should not strip valuable content. Fixed pasting tables from Microsoft Excel on Chrome.dataTransfer
does not work if text
data was set in the meantime.editor.getSnapshot()
may return a non-string value.Other Changes:
Fixed Issues:
New Features:
config.sharedSpaces
. Thanks to Undergrounder!dialog#setState()
method and used it in the Embed dialog to indicate that a resource is being loaded.repository.onWidget()
method — a convenient way to listen to widget events through the repository.Fixed Issues:
editor.getSelectedHtml()
method throws an error when called in the source mode.internalCommit
argument in the Image dialog seems to be never used.CKEDITOR.tools.htmlEncode()
and CKEDITOR.tools.htmlDecode()
methods.range.cloneContents()
and range.extractContents()
methods which now clone IDs similarly to their native counterparts.cloneId
arguments to the above methods, range.splitBlock()
and element.breakParent()
. Mind the default values and special behavior in the extractContents()
method!config.removeButtons
is ignored by the advanced toolbar configurator.Other Changes:
CKEDITOR.env.isCompatible
a blacklist rather than a whitelist. More about the change in the Browser Compatibility guide.CKEDITOR.fileTools.UploadsRepository
to CKEDITOR.fileTools.UploadRepository
and changed all related properties.lang.image.alertUrl
token from the Image plugin.New Features:
Clipboard (copy&paste, drag&drop) and file uploading features and improvements (#11437).
Major features:
editor#paste
event and a set of new editor events was introduced — dragstart
, drop
, dragend
.editor#paste
event.editor#paste
event can have the range
parameter so it is possible to change the paste position in the listener or paste in the not selectable position. Also the editor.insertHtml()
method now accepts range
as an additional parameter.'semantic-content'
on Webkit and Blink for all pasted content coming from external sources because of the low quality of HTML that these engines put into the clipboard. Internal and cross-editor paste is safe due to the change explained in the previous point.Other changes and related fixes:
editor#paste
event.div
-based editor.Browser support.
Browser support for related features varies significantly (see http://caniuse.com/clipboard).
#12875: Samples and toolbar configuration tools.
#10925: The Media Embed and Semantic Media Embed plugins were introduced. Read more about the new features in the Embedding Content article.
#10931: Added support for nesting widgets. It is now possible to insert one widget into another widget's nested editable. Note that unless nested editable's allowed content is defined precisely, starting from CKEditor 4.5 some widget buttons may become enabled. This feature is not supported in IE8. Included issues:
editor.insertHtml()
method. Fixes pasting a widget with a nested editable inside another widget's nested editable.Notification system:
#11636: Introduced new, UX-focused, methods for getting selected HTML and deleting it — editor.getSelectedHtml()
and editor.extractSelectedHtml()
.
#12416: Added the widget.definition.upcastPriority
property which gives more control over widget upcasting order to the widget author.
#12036: Initialize the editor in read-only mode when the <textarea>
element has a readonly
attribute.
#11905: The resize
event passes the current dimensions in its data.
#12126: Introduced config.image_prefillDimensions
and config.image2_prefillDimensions
to make pre-filling width
and height
configurable for the Enhanced Image.
#12746: Added a new configuration option to hide the Enhanced Image resizer.
#12150: Exposed the getNestedEditable()
and is*
widget helper functions (see the static methods).
#12448: Introduced the editable.insertHtmlIntoRange
method.
#12143: Added the config.floatSpacePreferRight
configuration option that switches the alignment of the floating toolbar. Thanks to InvisibleBacon!
#10986: Added support for changing dialog input and textarea text directions by using the Shift+Alt+Home/End keystrokes. The direction is stored in the value of the input by prepending the \u202A
or \u202B
marker to it. Read more in the documentation. Thanks to edithkk!
#12770: Added support for passing widget's startup data as a widget command's argument. Thanks to Rebrov Boris and Tieme van Veen!
#11583: Added support for the HTML5 required
attribute in various form elements. Thanks to Steven Busse!
Changes:
config.mathJaxLibrary
option does not default to the MathJax CDN any more. It needs to be configured to enable the Mathematical Formulas plugin now.editable.insertHtml()
and editable.insertElement()
when the range
parameter is used. Now, the editor.insertElement()
method works on a higher level, which means that it saves undo snapshots and sets the selection after insertion. Use the editable.insertElementIntoRange()
method directly for the pre 4.5 behavior of editable.insertElement()
.editor.showNotification()
instead of alert()
directly whenever possible. When the Notification plugin is loaded, the notification system is used automatically. Otherwise, the native alert()
is displayed.dom.element.addClass()
, dom.element.removeClass()
and dom.element.hasClass()
methods. Note: The previous implementation allowed passing multiple classes to addClass()
although it was only a side effect of that implementation. The new implementation does not allow this.Fixed issues:
range.cloneContents()
should not change the DOM in order not to affect selection.dom.element.getChild()
should not modify a passed array.<br />
filler is placed in the wrong position by the range.fixBlock()
method due to quirky Firefox behavior.Security Updates:
Fixed XSS vulnerability in the HTML parser reported by Dheeraj Joshi and Prem Kumar.
Issue summary: It was possible to execute XSS inside CKEditor after persuading the victim to: (i) switch CKEditor to source mode, then (ii) paste a specially crafted HTML code, prepared by the attacker, into the opened CKEditor source area, and (iii) switch back to WYSIWYG mode.
An upgrade is highly recommended!
Fixed Issues:
CKEDITOR.dom.text
is incorrect. Thanks to Ben Kiefer!/>
. Thanks to Віталій Крутько!CKEDITOR.ui.dialog.radio
validation to not work. Thanks to Florian Ludwig!element.appendText()
method does not work properly for empty elements.foo:href
attributes.<li>
elements. Thanks to Andrew Stucki!editor.getData()
parameter documentation.<iframe>
.<body>
has a margin.Other Changes:
0.2.3
.truncated-mathjax/
is now removed from the tests/
directory. Now bender.config.mathJaxLibPath
must be configured manually in order to run Mathematical Formulas plugin tests.Fixed Issues:
config.tabSpaces
configuration option value was greater than zero.table-layout
CSS property should be reset by skins. Thanks to vita10gy!iframe
. Thanks to Vitaliy Zurian!config.fillEmptyBlocks
should only apply when outputting data.chameleon
property defined and config.uiColor
is defined.Security Updates:
Fixed XSS vulnerability in the HTML parser reported by Maco Cortes.
Issue summary: It was possible to execute XSS inside CKEditor after persuading the victim to: (i) switch CKEditor to source mode, then (ii) paste a specially crafted HTML code, prepared by the attacker, into the opened CKEditor source area, and (iii) switch back to WYSIWYG mode.
An upgrade is highly recommended!
New Features:
<main>
element to the CKEDITOR.dtd
.Fixed Issues:
user-select: none
style. Thanks to shaohua!editor.blur
event is not fired on first blur after initializing the inline editor on an already focused element.editor.change
event fired on first navigation key press after typing.config.magicline_putEverywhere
name used for a Magic Line all-encompassing config.magicline_everywhere
configuration option.New Features:
node.getAscendant()
.Fixed Issues:
CKEDITOR_GETURL
is not used with some plugins where it should be used. Thanks to Thomas Andraschko!<base>
tag is not created when <head>
has an attribute. Thanks to naoki.fujikawa!config.autoParagraph
as deprecated.<cite>
elements.CKEDITOR.filter.instances
on editor destroy.document.title
which breaks updating title in the full HTML mode.Fixed Issues:
keypress
listeners should not be used in the undo manager. A complete rewrite of keyboard handling in the undo manager was made. Numerous smaller issues were fixed, among others:
editor.change
event.editor.change
event is fired when pressing Arrow keys.UndoManager.locked
property violate strict mode in the Undo plugin.paste
event is not fired when pasting with Shift+Ins.document.activeElement
.<body>
in Compatibility Mode will no longer reset selection to the first line.config.title
.Other Changes:
benderjs-ckeditor
into the main CKEditor repository.Security Updates:
An upgrade is highly recommended!
New Features:
Fixed Issues:
width
and height
styles even when they are not allowed.config.disableObjectResizing
does not work on IE. Note: We were not able to fix this issue on IE11+ because necessary events stopped working. See a last resort workaround and make sure to support our complaint to Microsoft.<meta>
tags should be allowed everywhere, including inside the <body>
element.config.fillEmptyBlocks
not working properly if a function is specified.Important Notes:
tests/
directory which contains editor tests is not available in release packages. It can only be found in the development version of CKEditor on GitHub.New Features:
editor.setData()
method from recording undo snapshots.Fixed Issues:
widget.repository.getByElement()
method was improved.editor.setData()
and nestedEditable.setData()
.<span>
elements created when joining adjacent elements (non-collapsed selection).role="radiogroup"
should be applied only to radio inputs' container.element.setText()
method should not trigger the layout engine.allowFullScreen
parameter in the editor data if set to true
.config.baseHref
into account when updating image dimensions.checkDirty()
method value after focusing or blurring a widget./dev/builder/build.sh
script.IndexSizeError
thrown when pasting into a non-empty selection anchored in one text node.New Features:
Fixed Issues:
dir
attribute for a preloaded language in CKEDITOR.lang. Thanks to Akash Mohapatra!<code>
element.<title>
element.editor.insertElement()
throwing an exception when there was no selection in the editor.element.addClass()
chainable symmetrically to element.removeClass()
.contenteditable
attribute set to true
.contenteditable
attribute set to false
are not downcasted properly.Other Changes:
attribute.specified
in all browsers except Internet Explorer.<pre>
to 4 spaces.Important Notes:
editor.beforePaste
event as deprecated.image
(was: caption
). Please note that once edited in CKEditor 4.4+, all existing images of the caption
class (<figure class="caption">
) will be filtered out unless the config.image2_captionedClass
option is set to caption
. For backward compatibility (i.e. when upgrading), it is highly recommended to use this setting, which also helps prevent CSS conflicts, etc. This does not apply to new CKEditor integrations.allowedContent
and requiredContent
properties for it manually, because the editor will not be able to find them.CKEDITOR.style
methods to ensure full compatibility with other features (e.g. applying styles to widgets requires that). We ensured backward compatibility though, so the CKEDITOR.style
will work even when the editor instance is not provided.New Features:
type
and widget
. Read more in the Widget Styles section of the "Styles Drop-down" guide. Note that by default, widgets support only classes and no other attributes or styles. Related changes and features:
CKEDITOR.style.addCustomHandler()
method for registering custom style handlers.CKEDITOR.style.apply()
and CKEDITOR.style.remove()
methods are now called with an editor instance instead of the document so they can be reused by the CKEDITOR.editor.applyStyle()
and CKEDITOR.editor.removeStyle()
methods. Backward compatibility was preserved, but from CKEditor 4.4 it is highly recommended to pass an editor instead of a document to these methods.widget.definition.styleableElements
, widget.definition.styleToAllowedContentRule
, widget.addClass()
, widget.removeClass()
, widget.getClasses()
, widget.hasClass()
, widget.applyStyle()
, widget.removeStyle()
, widget.checkStyleActive()
.CKEDITOR.style.toAllowedContent()
method which can be implemented by the custom style handler and if exists, it is used by the CKEDITOR.filter
to translate a style to allowed content rules.config.image2_captionedClass
option to configure the class of captioned images.config.image2_alignClasses
option to configure the way images are aligned with CSS classes.
If this setting is defined, the editor produces classes instead of inline styles for aligned images.editor.lang.image2.captionPlaceholder
string.filter.addElementCallback()
).editor.addContentsCss()
method that can be used for adding custom CSS files.CKEDITOR.tools.htmlDecode()
method for decoding HTML entities.CKEDITOR.tools.transparentImageData
property which contains transparent image data to be used in CSS or as image source.Other Changes:
editable.status
property.forceUpdate
option for the editor.lockSnapshot
event.Fixed Issues:
editor.removeStyle()
should result in a paragraph and not a div.New Features:
Fixed Issues:
Fixed Issues:
<span>
elements.element.renameNode()
not clearing the element.getName()
cache.{cke_protected_1}
appearing in data in various cases where HTML comments are placed next to "
or '
.Fixed Issues:
selection.removeAllRanges()
is now scoped to selection's root.editor.checkDirty()
method.editor.execCommand()
behavior.widget.doubleclick
event is not canceled anymore after editing was triggered.htmlDataProcessor
discovering protected attributes within other attributes' values.domObject.removeAllListeners()
method does not remove custom listeners completely.selection.getRanges()
method does not override cached ranges when used with the onlyEditables
argument.config.fullPage
is set to true
, entities are not encoded in editor output.Fixed Issues:
aria-pressed
attribute.CKEDITOR.template
improvements:
config.contentsCss
is affected by CKEDITOR.getUrl()
.widgets.repository.addUpcastCallback()
method that allows to block upcasting given element to a widget.line-height
to unitless values to avoid huge text overlapping (like in #9696).div
-based editor.<div>
element with text-align: center
and an image inside is not recognised correctly.Important Notes:
language
button is now Language
(#11201).Fixed Issues:
widget.repository.checkWidgets()
method now fires the widget.repository.checkWidgets
event, so from CKEditor 4.3.1 it is preferred to use the method rather than fire the event.editor.insertElement()
and editor.insertText()
methods do not call the widget.repository.checkWidgets()
method.env.quirks
for more details.figure
and figcaption
styles to the contents.css
file so Enhanced Image looks nicer.editor.insertElement()
method does not insert the element into every range of a selection any more.editor.applyStyle()
method removes attributes from nested elements.editor.destroy()
does not cleanup content generated by the Table Resize plugin for inline editors.<textarea>
element are not encoded.New Features:
draggable
option to disable drag and drop support for widgets.config.dialog_noConfirmCancel
configuration option that eliminates the need to confirm closing of a dialog window when the user changed any of its fields.Fixed Issues:
image2inline
and image2block
into one image2
widget.paste
command is no longer being disabled when the clipboard is empty.<br>
to <body>
, so it is stripped by the HTML data processor.contentDomInvalidated
event.range#moveToPoint
method.<body>
.New Features:
editor.enterMode
and editor.shiftEnterMode
properties – normalized versions of config.enterMode
and config.shiftEnterMode
.editor.setActiveEnterMode()
method, editor.activeEnterModeChange
event, and two properties: editor.activeEnterMode
and editor.activeShiftEnterMode
.editor.setActiveFilter()
method, editor.activeFilterChange
event, and editor.activeFilter
property.selection.fake()
method.htmlParser.filter
rules are not applied to non-editable elements (elements with contenteditable
attribute set to false
and their descendants) anymore. To add a rule which will be applied to all elements you need to pass an additional argument to the filter.addRules()
method.Fixed Issues:
Fixed Issues:
CKEDITOR.plugins.addExternal()
not handling paths including file name specified.CKEDITOR.tools.isArray()
not working cross frame.range.createBookmark2()
incorrectly normalizing offsets. This bug was causing many issues: #10850, #10842.Fixed Issues:
dir
) from main language file to core.onbeforeunload
event in the popup dialog.Important Notes:
Dropped compatibility support for Internet Explorer 7 and Firefox 3.6.
Both the Basic and the Standard distribution packages will not contain the new Indent Block plugin. Because of this the Advanced Content Filter might remove block indentations from existing contents. If you want to prevent this, either add an appropriate ACF rule to your filter or create a custom build based on the Basic/Standard package and add the Indent Block plugin in CKBuilder.
New Features:
config.title
setting to change the human-readable title of the editor.editor.change
event.required
attributes on <textarea>
elements — introduced editor.required
event.<textarea>
elements with the inline editor.Fixed Issues:
editor.setData()
.New Features:
Fixed Issues:
config.shiftEnterMode
.CKEDITOR.dialog.addIframe()
incorrectly sets the iframe size in dialog windows.New Features:
Fixed Issues:
editable.insertText()
loses characters when RegExp
replace controls are being inserted.document.domain
has been altered.keystrokeHandler.blockedKeystrokes
when calling editor.setReadOnly()
.config.customConfig
files.config.enterMode
is CKEDITOR.ENTER_BR
.role="application"
should not be used for dialog windows.role="application"
should not be used for floating panels.New Features:
Fixed Issues:
mouseup
event.<textarea>
should not be modified by the htmlDataProcessor
.tabSpaces
. Unified data-cke-*
attributes filtering.keydown
in specific cases.undoManager.update()
does not refresh the command state.<s>
using Remove Format.Fixed Issues:
filter.allowedContent
property always contains rules in the same format.<a>
elements anymore.align
attribute to float
style to preserve backward compatibility after the introduction of Advanced Content Filter.config.justifyClasses
is defined.New Features:
#9829: Advanced Content Filter - data and features activation based on editor configuration.
Brand new data filtering system that works in 2 modes:
config.allowedContent
rules - the data
will be filtered and the editor features (toolbar items, commands, keystrokes) will be enabled if they are allowed.See the datafiltering.html
sample, guides and CKEDITOR.filter
API documentation.
#9387: Reintroduced Shared Spaces - the ability to display toolbar and bottom editor space in selected locations and to share them by different editor instances.
#9907: Added the contentPreview
event for preview data manipulation.
#9713: Introduced the Source Dialog plugin that brings raw HTML editing for inline editor instances.
Included in #9829: Introduced new events, toHtml
and toDataFormat
, allowing for better integration with data processing.
#9981: Added ability to filter htmlParser.fragment
, htmlParser.element
etc. by many htmlParser.filter
s before writing structure to an HTML string.
Included in #10103:
editor.status
property to make it easier to check the current status of the editor.command
state is now CKEDITOR.TRISTATE_DISABLE
. It will be activated on editor.instanceReady
or immediately after being added if the editor is already initialized.#9796: Introduced <s>
as a default tag for strikethrough, which replaces obsolete <strike>
in HTML5.
Fixed Issues:
editor.destroy()
.Fixed Issues:
CKEDITOR.getUrl()
with CKEDITOR_GETURL
.stylesSet.add()
are displayed in the wrong order.editor.readOnly
is set.editor.getData()
if set via the Document Properties dialog window.selectionChange
event is not fired when mouse selection ended outside editable.editor.checkDirty()
returns true
when called onload. Removed the obsolete editor.mayBeDirty
flag.Fixed Issues:
Fixed Issues:
box-sizing
style should not influence the editor UI elements.tel
, email
, search
and url
input types.<div>
element stay permanently even after the user exits editing the <div>
.border-width
style is specified.<pre>
elements.onChange
is not fired for checkboxes in dialogs.editor.addRemoveFormatFilter()
is exposed before it really works.pasteFromWordCleanupFile
configuration option is now taken from the instance configuration.The first stable release of the new CKEditor 4 code line.
The CKEditor JavaScript API has been kept compatible with CKEditor 4, whenever possible. The list of relevant changes can be found in the API Changes page of the CKEditor 4 documentation.
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。