<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://docs-old.ckeditor.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Nathfy</id>
		<title>CKSource Docs - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://docs-old.ckeditor.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Nathfy"/>
		<link rel="alternate" type="text/html" href="https://docs-old.ckeditor.com/Special:Contributions/Nathfy"/>
		<updated>2026-04-28T10:16:44Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.29.1</generator>

	<entry>
		<id>https://docs-old.ckeditor.com/index.php?title=Talk:CKEditor_3.x/Developers_Guide/Integration&amp;diff=2582</id>
		<title>Talk:CKEditor 3.x/Developers Guide/Integration</title>
		<link rel="alternate" type="text/html" href="https://docs-old.ckeditor.com/index.php?title=Talk:CKEditor_3.x/Developers_Guide/Integration&amp;diff=2582"/>
				<updated>2009-07-02T11:31:49Z</updated>
		
		<summary type="html">&lt;p&gt;Nathfy: /* getting the CKeditor focus using the API */ new section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Javascript API=&lt;br /&gt;
&lt;br /&gt;
I couldn't find documentation on how to talk to the javascript API. I figured that through CKEDITOR.instances.id_of_textarea.setData(string); I could update the contents or get it with getData();&lt;br /&gt;
&lt;br /&gt;
First thing I learned I can also access an instance of an editor through:&lt;br /&gt;
CKEDITOR.instances[&amp;quot;id_of_textarea&amp;quot;].setData(string); //This is more usefull in generic code.&lt;br /&gt;
&lt;br /&gt;
I wanted to see which functions are available for me and show that in... the editor itself. I did the following.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var objEditor = CKEDITOR.instances[&amp;quot;id_of_textarea&amp;quot;];&lt;br /&gt;
var str = &amp;quot;&amp;quot;;&lt;br /&gt;
for (var item in objEditor) {&lt;br /&gt;
  str += &amp;quot;&amp;lt;strong&amp;gt;&amp;quot; + item + &amp;quot;&amp;lt;/strong&amp;gt;=&amp;quot; + objEditor[item].toString().str_replace(&amp;quot;\n&amp;quot;, &amp;quot;&amp;lt;br&amp;gt;&amp;quot;).str_replace(&amp;quot;;&amp;quot;, &amp;quot;;&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;quot;).str_replace(&amp;quot;{&amp;quot;, &amp;quot;{&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;quot;).str_replace(&amp;quot;}&amp;quot;, &amp;quot;}&amp;lt;br&amp;gt;&amp;quot;).str_replace(&amp;quot;;&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;}&amp;quot;, &amp;quot;;&amp;lt;br&amp;gt;}&amp;quot;) + &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
objEditor.setData(str);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With this output (I aligned the code a bit for readibility):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
getThemeSpace = function(l) {&lt;br /&gt;
  var m = 'cke_' + l,&lt;br /&gt;
  n = this._[m] || (this._[m] = a.document.getById(m + '_' + this.name));&lt;br /&gt;
  return n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
focus = function() {&lt;br /&gt;
  var n = l(this);&lt;br /&gt;
  if (n) n.focus();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
setMode = function(n) {&lt;br /&gt;
  var o, p = this.getThemeSpace('contents'),&lt;br /&gt;
  q = this.checkDirty();&lt;br /&gt;
  if (this.mode) {&lt;br /&gt;
    if (n == this.mode) return;&lt;br /&gt;
    var r = l(this);&lt;br /&gt;
    o = r.getData();&lt;br /&gt;
    r.unload(p);&lt;br /&gt;
    this.mode = '';&lt;br /&gt;
  }&lt;br /&gt;
  p.setHtml('');&lt;br /&gt;
  var s = l(this, n);&lt;br /&gt;
  if (!s) throw '[CKEDITOR.editor.setMode] Unknown mode &amp;quot;' + n + '&amp;quot;.';&lt;br /&gt;
  if (!q) this.on('mode',&lt;br /&gt;
  function() {&lt;br /&gt;
    this.resetDirty();&lt;br /&gt;
    this.removeListener('mode', arguments.callee);&lt;br /&gt;
  });&lt;br /&gt;
  s.load(p, typeof o != 'string' ? this.getData() : o);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addMode = function(n, o) {&lt;br /&gt;
  o.name = n;&lt;br /&gt;
  (this._.modes || (this._.modes = {}))[n] = o;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
mode = openDialog = function(l) {&lt;br /&gt;
  var m = a.dialog._.dialogDefinitions[l];&lt;br /&gt;
  if (typeof m == 'function') {&lt;br /&gt;
    var n = this._.storedDialogs || (this._.storedDialogs = {}),&lt;br /&gt;
    o = n[l] || (n[l] = new a.dialog(this, l));&lt;br /&gt;
    o.show();&lt;br /&gt;
    return o;&lt;br /&gt;
  }&lt;br /&gt;
  var p = a.document.getBody(),&lt;br /&gt;
  q = p.$.style.cursor,&lt;br /&gt;
  r = this;&lt;br /&gt;
  p.setStyle('cursor', 'wait');&lt;br /&gt;
  a.scriptLoader.load(a.getUrl(m),&lt;br /&gt;
  function() {&lt;br /&gt;
    r.openDialog(l);&lt;br /&gt;
    p.setStyle('cursor', q);&lt;br /&gt;
  });&lt;br /&gt;
  return null;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
restoreRealElement = function(l) {&lt;br /&gt;
  var m = decodeURIComponent(l.getAttribute('_cke_realelement'));&lt;br /&gt;
  return g.createFromHtml(m, this.document);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
createFakeParserElement = function(l, m, n, o) {&lt;br /&gt;
  var p = new a.htmlParser.basicWriter();&lt;br /&gt;
  l.writeHtml(p);&lt;br /&gt;
  var q = p.getHtml(),&lt;br /&gt;
  r = {&lt;br /&gt;
    'class': m,&lt;br /&gt;
    src: a.getUrl('images/spacer.gif'),&lt;br /&gt;
    _cke_realelement: encodeURIComponent(q)&lt;br /&gt;
  };&lt;br /&gt;
  if (n) r._cke_real_element_type = n;&lt;br /&gt;
  if (o) r._cke_resizable = o;&lt;br /&gt;
  return new a.htmlParser.element('img', r);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
createFakeElement = function(l, m, n, o) {&lt;br /&gt;
  var p = {&lt;br /&gt;
    'class': m,&lt;br /&gt;
    src: a.getUrl('images/spacer.gif'),&lt;br /&gt;
    _cke_realelement: encodeURIComponent(l.getOuterHtml())&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  if (n) p._cke_real_element_type = n;&lt;br /&gt;
  if (o) p._cke_resizable = o;&lt;br /&gt;
  return this.document.createElement('img', {&lt;br /&gt;
    attributes: p&lt;br /&gt;
  });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
forceNextSelectionCheck = function() {&lt;br /&gt;
  delete this._.selectionPreviousPath;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
getSelection = function() {&lt;br /&gt;
  var u = this;&lt;br /&gt;
  var s = u.document ? u.document.getSelection() : null;&lt;br /&gt;
  if (s &amp;amp;&amp;amp; c) {&lt;br /&gt;
    var t = s.getNative().createRange();&lt;br /&gt;
    if (!t) return null;&lt;br /&gt;
    else if (t.item) return t.item(0).ownerDocument == u.document.$ ? s: null;&lt;br /&gt;
    else return t.parentElement().ownerDocument == u.document.$ ? s: null;&lt;br /&gt;
  }&lt;br /&gt;
  return s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
getMenuItem = function(l) {&lt;br /&gt;
  return this._.menuItems[l];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addMenuItems = function(l) {&lt;br /&gt;
  for (var m in l) this.addMenuItem(m, l[m]);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addMenuItem = function(l, m) {&lt;br /&gt;
  if (this._.menuGroups[m.group]) this._.menuItems[l] = new a.menuItem(this, l, m);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
attachStyleStateChange = function(l, m) {&lt;br /&gt;
  var n = this._.styleStateChangeCallbacks;&lt;br /&gt;
  if (!n) {&lt;br /&gt;
    n = this._.styleStateChangeCallbacks = [];&lt;br /&gt;
    this.on('selectionChange',&lt;br /&gt;
    function(o) {&lt;br /&gt;
      for (var p = 0; p p++) {&lt;br /&gt;
        var q = n[p],&lt;br /&gt;
        r = q.style.checkActive(o.data.path) ? 1 : 2;&lt;br /&gt;
        if (q.state !== r) {&lt;br /&gt;
          q.fn.call(this, r);&lt;br /&gt;
          q.state !== r;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
  n.push({&lt;br /&gt;
    style: l,&lt;br /&gt;
    fn: m&lt;br /&gt;
  });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
insertText = function(l) {&lt;br /&gt;
  l = e.htmlEncode(l);&lt;br /&gt;
  l = l.replace(/(?:\r\n)|\n|\r/g, '&lt;br /&gt;
');&lt;br /&gt;
  this.insertHtml(l);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
updateElement = function() {&lt;br /&gt;
  var m = this;&lt;br /&gt;
  var l = m.element;&lt;br /&gt;
  if (l &amp;amp;&amp;amp; m.elementMode == 1) if (l.is('textarea')) l.setValue(m.getData());&lt;br /&gt;
  else l.setHtml(m.getData());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
resetDirty = function() {&lt;br /&gt;
  if (this.mayBeDirty) this._.previousValue = this.getSnapshot();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
checkDirty = function() {&lt;br /&gt;
  return this.mayBeDirty &amp;amp;&amp;amp; this._.previousValue !== this.getSnapshot();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
insertElement = function(l) {&lt;br /&gt;
  this.fire('insertElement', l);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
insertHtml = function(l) {&lt;br /&gt;
  this.fire('insertHtml', l);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
setData = function(l) {&lt;br /&gt;
  var m = {&lt;br /&gt;
    dataValue: l&lt;br /&gt;
  };&lt;br /&gt;
  this.fire('setData', m);&lt;br /&gt;
  this._.data = m.dataValue;&lt;br /&gt;
  this.fire('afterSetData', m);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
loadSnapshot = function(l) {&lt;br /&gt;
  this.fire('loadSnapshot', l);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
getSnapshot = function() {&lt;br /&gt;
  var l = this.fire('getSnapshot');&lt;br /&gt;
  if (typeof l != 'string') {&lt;br /&gt;
    var m = this.element;&lt;br /&gt;
    if (m &amp;amp;&amp;amp; this.elementMode == 1) l = m.is('textarea') ? m.getValue() : m.getHtml();&lt;br /&gt;
  }&lt;br /&gt;
  return l;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
getData = function() {&lt;br /&gt;
  var n = this;&lt;br /&gt;
  n.fire('beforeGetData');&lt;br /&gt;
  var l = n._.data;&lt;br /&gt;
  if (typeof l != 'string') {&lt;br /&gt;
    var m = n.element;&lt;br /&gt;
    if (m &amp;amp;&amp;amp; n.elementMode == 1) l = m.is('textarea') ? m.getValue() : m.getHtml();&lt;br /&gt;
    else l = '';&lt;br /&gt;
  }&lt;br /&gt;
  l = {&lt;br /&gt;
    dataValue: l&lt;br /&gt;
  };&lt;br /&gt;
  n.fire('getData', l);&lt;br /&gt;
  return l.dataValue;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
getCommand = function(l) {&lt;br /&gt;
  return this._.commands[l];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
execCommand = function(l, m) {&lt;br /&gt;
  var n = this.getCommand(l),&lt;br /&gt;
  o = {&lt;br /&gt;
    name: l,&lt;br /&gt;
    commandData: m,&lt;br /&gt;
    command: n&lt;br /&gt;
  };&lt;br /&gt;
  if (n &amp;amp;&amp;amp; n.state != 0) if (this.fire('beforeCommandExec', o) !== true) {&lt;br /&gt;
    o.returnValue = n.exec(o.commandData);&lt;br /&gt;
    if (this.fire('afterCommandExec', o) !== true) return o.returnValue;&lt;br /&gt;
  }&lt;br /&gt;
  return false;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
destroy = function(l) {&lt;br /&gt;
  var m = this;&lt;br /&gt;
  if (!l) m.updateElement();&lt;br /&gt;
  m.theme.destroy(m);&lt;br /&gt;
  a.remove(m);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addCss = function(l) {&lt;br /&gt;
  this._.styles.push(l);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addCommand = function(l, m) {&lt;br /&gt;
  return this._.commands[l] = new a.command(this, m);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
hasListeners = function() {&lt;br /&gt;
  var f = this;&lt;br /&gt;
  if (! (f._ &amp;amp;&amp;amp; f._.events)) a.event.call(f);&lt;br /&gt;
  (f[e] = a.event.prototype[e]).apply(f, arguments);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
removeListener = function() {&lt;br /&gt;
  var f = this;&lt;br /&gt;
  if (! (f._ &amp;amp;&amp;amp; f._.events)) a.event.call(f);&lt;br /&gt;
  (f[e] = a.event.prototype[e]).apply(f, arguments);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
fireOnce = function(b, c) {&lt;br /&gt;
  return a.event.prototype.fireOnce.call(this, b, c, this);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
fire = function(b, c) {&lt;br /&gt;
  return a.event.prototype.fire.call(this, b, c, this);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
_ = [object Object]&lt;br /&gt;
elementMode = 1&lt;br /&gt;
_init = function() {&lt;br /&gt;
  var z = this;&lt;br /&gt;
  var x = g.get(z._.element),&lt;br /&gt;
  y = z._.instanceConfig;&lt;br /&gt;
  delete z._.element;&lt;br /&gt;
  delete z._.instanceConfig;&lt;br /&gt;
  z._.commands = {};&lt;br /&gt;
  z._.styles = [];&lt;br /&gt;
  z.element = x;&lt;br /&gt;
  z.name = x &amp;amp;&amp;amp; z.elementMode == 1 &amp;amp;&amp;amp; (x.getId() || x.getNameAtt()) || m();&lt;br /&gt;
  z.config = e.prototypedCopy(i);&lt;br /&gt;
  z.ui = new k(z);&lt;br /&gt;
  z.focusManager = new a.focusManager(z);&lt;br /&gt;
  a.fire('instanceCreated', null, z);&lt;br /&gt;
  z.on('mode', w);&lt;br /&gt;
  p(z, y);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
element = [object Object]&lt;br /&gt;
name = input_memo&lt;br /&gt;
config = [object Object]&lt;br /&gt;
ui = [object Object]&lt;br /&gt;
focusManager = [object Object]&lt;br /&gt;
on = function(c, d, e, f, g) {&lt;br /&gt;
  var h = this._.events[c] || (this._.events[c] = new b(c));&lt;br /&gt;
  if (h.getListenerIndex(d) &amp;lt; 0) {&lt;br /&gt;
    var i = h.listeners;&lt;br /&gt;
    if (!e) e = this;&lt;br /&gt;
    if (isNaN(g)) g = 10;&lt;br /&gt;
    var j = this,&lt;br /&gt;
    k = function(m, n, o, p) {&lt;br /&gt;
      var q = {&lt;br /&gt;
        name: c,&lt;br /&gt;
        sender: this,&lt;br /&gt;
        editor: m,&lt;br /&gt;
        data: n,&lt;br /&gt;
        listenerData: f,&lt;br /&gt;
        stop: o,&lt;br /&gt;
        cancel: p,&lt;br /&gt;
        removeListener: function() {&lt;br /&gt;
          j.removeListener(c, d);&lt;br /&gt;
        }&lt;br /&gt;
      };&lt;br /&gt;
      d.call(e, q);&lt;br /&gt;
      return q.data;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    k.fn = d;&lt;br /&gt;
    k.priority = g;&lt;br /&gt;
    for (var l = i.length - 1; l &amp;gt;= 0; l--)&lt;br /&gt;
    if (i[l].priority &amp;lt;= g) {&lt;br /&gt;
      i.splice(l + 1, 0, k);&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    i.unshift(k);&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anybody who wishes to talk to an instance of the CKeditor through the javascript API, now has a starting point and is able to see which functions are available for an instance of an CKeditor.&lt;br /&gt;
&lt;br /&gt;
If you find yourself able to use any of these functions, please create your account here on the wiki and document it. The developers of CKeditor are working crazily on coding CKEditor v3.&lt;br /&gt;
&lt;br /&gt;
== getting the CKeditor focus using the API ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
To respond to the focus event of the editor:&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;pre&amp;gt;var my_id='your_editor_id'; //this is the same as the id of the replaced text field&lt;br /&gt;
var the_ed=CKEDITOR.instances[my_id]&lt;br /&gt;
//respond to focus event&lt;br /&gt;
the_ed.on( 'focus', function()&lt;br /&gt;
&lt;br /&gt;
  //show the editor data as example&lt;br /&gt;
  alert(this.getData());&lt;br /&gt;
});&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nathfy</name></author>	</entry>

	</feed>