


javascript - wordpress 3.8.1 版本安装 ck编辑器插件 4.0 js错误 Uncaught TypeError: Cannot read property 'add' of undefined
安装插件后 不能正常预览
问题代码区域
c.onSubmit.add(function() {}) 的错误
下面是 wp中的js代码 那位大什么帮忙 解读一番也好
run: function() { var b = this; this.checkPost(), this.schedule = a.schedule({ time: 15e3, func: function() { wp.autosave.local.save() }, repeat: !0, protect: !0 }), a("form#post").on("submit.autosave-local", function() { var c = "undefined" != typeof tinymce && tinymce.get("content"), d = a("#post_ID").val() || 0; c && !c.isHidden() ? c.onSubmit.add(function() { wp.autosave.local.save({ post_title: a("#title").val() || "", content: a("#content").val() || "", excerpt: a("#excerpt").val() || "" }) }) : b.save({ post_title: a("#title").val() || "", content: a("#content").val() || "", excerpt: a("#excerpt").val() || "" }), wpCookies.set("wp-saving-post-" + d, "check") }) },
在autosave.min.js文件中
错误提示 Uncaught TypeError: Cannot read property 'add' of undefined
没太看懂这个js 关键是 ckeditor.utils.js 和这个文件的关系 以及 如何调用,作用域是什么完全搞不清楚。
<br>function autosave_parse_response(a) { var b, c, d = wpAjax.parseAjaxResponse(a, "autosave"); return d && d.responses && d.responses.length && (d.responses[0].supplemental && (c = d.responses[0].supplemental, jQuery.each(c, function(a, b) { a.match(/^replace-/) && jQuery("#" + a.replace("replace-", "")).val(b) })), d.errors || ((b = parseInt(d.responses[0].id, 10)) && autosave_update_slug(b), d.responses[0].data && jQuery(".autosave-message").text(d.responses[0].data))), d } function autosave_saved(a) { blockSave = !1, autosave_parse_response(a), autosave_enable_buttons() } function autosave_saved_new(a) { blockSave = !1; var b, c = autosave_parse_response(a); c && c.responses.length && !c.errors ? (b = parseInt(c.responses[0].id, 10), b && (notSaved = !1, jQuery("#auto_draft").val("0")), autosave_enable_buttons(), autosaveDelayPreview && (autosaveDelayPreview = !1, doPreview())) : autosave_enable_buttons() } function autosave_update_slug(a) { "undefined" != makeSlugeditClickable && jQuery.isFunction(makeSlugeditClickable) && !jQuery("#edit-slug-box > *").size() && jQuery.post(ajaxurl, { action: "sample-permalink", post_id: a, new_title: fullscreen && fullscreen.settings.visible ? jQuery("#wp-fullscreen-title").val() : jQuery("#title").val(), samplepermalinknonce: jQuery("#samplepermalinknonce").val() }, function(a) { if ("-1" !== a) { var b = jQuery("#edit-slug-box"); b.html(a), b.hasClass("hidden") && b.fadeIn("fast", function() { b.removeClass("hidden") }), makeSlugeditClickable() } }) } function autosave_loading() { jQuery(".autosave-message").html(autosaveL10n.savingText) } function autosave_enable_buttons() { jQuery(document).trigger("autosave-enable-buttons"), wp.heartbeat && wp.heartbeat.hasConnectionError() || setTimeout(function() { var a = jQuery("#submitpost"); a.find(":button, :submit").removeAttr("disabled"), a.find(".spinner").hide() }, 500) } function autosave_disable_buttons() { jQuery(document).trigger("autosave-disable-buttons"), jQuery("#submitpost").find(":button, :submit").prop("disabled", !0), setTimeout(autosave_enable_buttons, 5e3) } function delayed_autosave() { setTimeout(function() { blockSave || autosave() }, 200) } var autosave, autosavePeriodical, fullscreen, doPreview, autosaveLast = "", autosaveDelayPreview = !1, notSaved = !0, blockSave = !1, autosaveLockRelease = !0; jQuery(document).ready(function(a) { autosaveLast = a("#wp-content-wrap").hasClass("tmce-active") && "undefined" != typeof switchEditors ? wp.autosave.getCompareString({ post_title: a("#title").val() || "", content: switchEditors.pre_wpautop(a("#content").val()) || "", excerpt: a("#excerpt").val() || "" }) : wp.autosave.getCompareString(), autosavePeriodical = a.schedule({ time: 1e3 * autosaveL10n.autosaveInterval, func: function() { autosave() }, repeat: !0, protect: !0 }), a("#post").submit(function() { a.cancel(autosavePeriodical), autosaveLockRelease = !1 }), a('input[type="submit"], a.submitdelete', "#submitpost").click(function() { blockSave = !0, window.onbeforeunload = null, a(":button, :submit", "#submitpost").each(function() { var b = a(this); b.hasClass("button-primary") ? b.addClass("button-primary-disabled") : b.addClass("button-disabled") }), "publish" == a(this).attr("id") ? a("#major-publishing-actions .spinner").show() : a("#minor-publishing .spinner").show() }), window.onbeforeunload = function() { var b, c = "undefined" != typeof tinymce ? tinymce.activeEditor : !1; if (c && !c.isHidden()) { if (c.isDirty()) return autosaveL10n.saveAlert } else if (b = fullscreen && fullscreen.settings.visible ? wp.autosave.getCompareString({ post_title: a("#wp-fullscreen-title").val() || "", content: a("#wp_mce_fullscreen").val() || "", excerpt: a("#excerpt").val() || "" }) : wp.autosave.getCompareString(), b != autosaveLast) return autosaveL10n.saveAlert }, a(window).unload(function(b) { autosaveLockRelease && (b.target && "#document" != b.target.nodeName || a.ajax({ type: "POST", url: ajaxurl, async: !1, data: { action: "wp-remove-post-lock", _wpnonce: a("#_wpnonce").val(), post_ID: a("#post_ID").val(), active_post_lock: a("#active_post_lock").val() } })) }), a("#post-preview").click(function() { return "1" == a("#auto_draft").val() && notSaved ? (autosaveDelayPreview = !0, autosave(), !1) : (doPreview(), !1) }), doPreview = function() { a("input#wp-preview").val("dopreview"), a("form#post").attr("target", "wp-preview").submit().attr("target", ""); var b = navigator.userAgent.toLowerCase(); - 1 != b.indexOf("safari") && -1 == b.indexOf("chrome") && a("form#post").attr("action", function(a, b) { return b + "?t=" + (new Date).getTime() }), a("input#wp-preview").val("") }, a("#title").on("keydown.editor-focus", function(b) { var c; 9 == b.which && (b.ctrlKey || b.altKey || b.shiftKey || ("undefined" != typeof tinymce && (c = tinymce.get("content")), c && !c.isHidden() ? a(this).one("keyup", function() { a("#content_tbl td.mceToolbar > a").focus() }) : a("#content").focus(), b.preventDefault())) }), "1" == a("#auto_draft").val() && a("#title").blur(function() { this.value && "1" == a("#auto_draft").val() && delayed_autosave() }), a(document).on("heartbeat-connection-lost.autosave", function(b, c, d) { if ("timeout" === c || 503 == d) { var e = a("#lost-connection-notice"); wp.autosave.local.hasStorage || e.find(".hide-if-no-sessionstorage").hide(), e.show(), autosave_disable_buttons() } }).on("heartbeat-connection-restored.autosave", function() { a("#lost-connection-notice").hide(), autosave_enable_buttons() }) }), autosave = function() { var a, b, c = wp.autosave.getPostData(); return blockSave = !0, c.autosave ? "block" == jQuery("#TB_window").css("display") ? !1 : (a = wp.autosave.getCompareString(c), a == autosaveLast ? !1 : (autosaveLast = a, jQuery(document).triggerHandler("wpcountwords", [c.content]), autosave_disable_buttons(), b = "1" == c.auto_draft ? autosave_saved_new : autosave_saved, jQuery.ajax({ data: c, beforeSend: autosave_loading, type: "POST", url: ajaxurl, success: b }), !0)) : !1 }, window.wp = window.wp || {}, wp.autosave = wp.autosave || {}, function(a) { wp.autosave.getPostData = function() { var b, c, d = "undefined" != typeof tinymce ? tinymce.activeEditor : null, e = [], f = { action: "autosave", autosave: !0, post_id: a("#post_ID").val() || 0, autosavenonce: a("#autosavenonce").val() || "", post_type: a("#post_type").val() || "", post_author: a("#post_author").val() || "", excerpt: a("#excerpt").val() || "" }; if (d && !d.isHidden()) { if (d.plugins.spellchecker && d.plugins.spellchecker.active) return f.autosave = !1, f; "mce_fullscreen" == d.id && tinymce.get("content").setContent(d.getContent({ format: "raw" }), { format: "raw" }), tinymce.triggerSave() } return "undefined" != typeof fullscreen && fullscreen.settings.visible ? (f.post_title = a("#wp-fullscreen-title").val() || "", f.content = a("#wp_mce_fullscreen").val() || "") : (f.post_title = a("#title").val() || "", f.content = a("#content").val() || ""), a('input[id^="in-category-"]:checked').each(function() { e.push(this.value) }), f.catslist = e.join(","), (b = a("#post_name").val()) && (f.post_name = b), (c = a("#parent_id").val()) && (f.parent_id = c), a("#comment_status").prop("checked") && (f.comment_status = "open"), a("#ping_status").prop("checked") && (f.ping_status = "open"), "1" == a("#auto_draft").val() && (f.auto_draft = "1"), f }, wp.autosave.getCompareString = function(b) { return "object" == typeof b ? (b.post_title || "") + "::" + (b.content || "") + "::" + (b.excerpt || "") : (a("#title").val() || "") + "::" + (a("#content").val() || "") + "::" + (a("#excerpt").val() || "") }, wp.autosave.local = { lastSavedData: "", blog_id: 0, hasStorage: !1, checkStorage: function() { var a = Math.random(), b = !1; try { sessionStorage.setItem("wp-test", a), b = sessionStorage.getItem("wp-test") == a, sessionStorage.removeItem("wp-test") } catch (c) {} return this.hasStorage = b, b }, getStorage: function() { var a = !1; return this.hasStorage && this.blog_id && (a = sessionStorage.getItem("wp-autosave-" + this.blog_id), a = a ? JSON.parse(a) : {}), a }, setStorage: function(a) { var b; return this.hasStorage && this.blog_id ? (b = "wp-autosave-" + this.blog_id, sessionStorage.setItem(b, JSON.stringify(a)), null !== sessionStorage.getItem(b)) : !1 }, getData: function() { var b = this.getStorage(), c = a("#post_ID").val(); return b && c ? b["post_" + c] || !1 : !1 }, setData: function(b) { var c = this.getStorage(), d = a("#post_ID").val(); if (!c || !d) return !1; if (b) c["post_" + d] = b; else { if (!c.hasOwnProperty("post_" + d)) return !1; delete c["post_" + d] } return this.setStorage(c) }, save: function(b) { var c, d, e = !1; return b ? (c = this.getData() || {}, a.extend(c, b), c.autosave = !0) : c = wp.autosave.getPostData(), c.autosave ? (d = wp.autosave.getCompareString(c), d == this.lastSavedData ? !1 : (c.save_time = (new Date).getTime(), c.status = a("#post_status").val() || "", e = this.setData(c), e && (this.lastSavedData = d), e)) : !1 }, init: function(b) { var c = this; this.checkStorage() && (a("#content").length || a("#excerpt").length) && (b && a.extend(this, b), this.blog_id || (this.blog_id = "undefined" != typeof window.autosaveL10n ? window.autosaveL10n.blog_id : 0), a(document).ready(function() { c.run() })) }, run: function() { var b = this; this.checkPost(), this.schedule = a.schedule({ time: 15e3, func: function() { wp.autosave.local.save() }, repeat: !0, protect: !0 }), a("form#post").on("submit.autosave-local", function() { var c = "undefined" != typeof tinymce && tinymce.get("content"), d = a("#post_ID").val() || 0; c && !c.isHidden() ? c.onSubmit.add(function() { wp.autosave.local.save({ post_title: a("#title").val() || "", content: a("#content").val() || "", excerpt: a("#excerpt").val() || "" }) }) : b.save({ post_title: a("#title").val() || "", content: a("#content").val() || "", excerpt: a("#excerpt").val() || "" }), wpCookies.set("wp-saving-post-" + d, "check") }) }, compare: function(a, b) { function c(a) { return a.toString().replace(/[\x20\t\r\n\f]+/g, "") } return c(a || "") == c(b || "") }, checkPost: function() { var b, c, d, e, f = this, g = this.getData(), h = a("#post_ID").val() || 0, i = wpCookies.get("wp-saving-post-" + h); if (g) return i && (wpCookies.remove("wp-saving-post-" + h), "saved" == i) ? (this.setData(!1), void 0) : (a("#has-newer-autosave").length || (b = a("#content").val() || "", c = a("#title").val() || "", d = a("#excerpt").val() || "", a("#wp-content-wrap").hasClass("tmce-active") && "undefined" != typeof switchEditors && (b = switchEditors.pre_wpautop(b)), "check" != i && this.compare(b, g.content) && this.compare(c, g.post_title) && this.compare(d, g.excerpt) || (this.restore_post_data = g, this.undo_post_data = { content: b, post_title: c, excerpt: d }, e = a("#local-storage-notice"), a(".wrap h2").first().after(e.addClass("updated").show()), e.on("click", function(b) { var c = a(b.target); c.hasClass("restore-backup") ? (f.restorePost(f.restore_post_data), c.parent().hide(), a(this).find("p.undo-restore").show()) : c.hasClass("undo-restore-backup") && (f.restorePost(f.undo_post_data), c.parent().hide(), a(this).find("p.local-restore").show()), b.preventDefault() }))), void 0) }, restorePost: function(b) { var c; return b ? (this.lastSavedData = wp.autosave.getCompareString(b), a("#title").val() != b.post_title && a("#title").focus().val(b.post_title || ""), a("#excerpt").val(b.excerpt || ""), c = "undefined" != typeof tinymce && tinymce.get("content"), c && !c.isHidden() && "undefined" != typeof switchEditors ? (c.undoManager.add(), c.setContent(b.content ? switchEditors.wpautop(b.content) : "")) : (a("#content-html").click(), a("#content").val(b.content)), !0) : !1 } }, wp.autosave.local.init() }(jQuery);
ckeditor 中的js
<br><br>var editorCKE; jQuery(document).ready(function () { ckeditorSettings.configuration['on'] = { configLoaded : function ( evt ) { if (typeof(ckeditorSettings.externalPlugins) != 'undefined') { var externals=new Array(); for (var x in ckeditorSettings.externalPlugins) { CKEDITOR.plugins.addExternal(x, ckeditorSettings.externalPlugins[x]); externals.push(x); } } evt.editor.config.extraPlugins += (evt.editor.config.extraPlugins ? ','+externals.join(',') : externals.join(',')); if (evt.editor.config[evt.editor.config.toolbar +'_removeButtons']); evt.editor.config.removeButtons = evt.editor.config[evt.editor.config.toolbar +'_removeButtons']; CKEDITOR.addCss(evt.editor.config.extraCss); } }; CKEDITOR.on( 'instanceReady', function( ev ) { var dtd = CKEDITOR.dtd; for ( var e in CKEDITOR.tools.extend( {}, dtd.$nonBodyContent, dtd.$block, dtd.$listItem, dtd.$tableContent ) ) { ev.editor.dataProcessor.writer.setRules( e, ckeditorSettings.outputFormat); } ev.editor.dataProcessor.writer.setRules( 'br', { breakAfterOpen : true }); ev.editor.dataProcessor.writer.setRules( 'pre', { indent: false }); editorCKE = CKEDITOR.instances['content']; }); if (ckeditorSettings.textarea_id != 'comment'){ edInsertContentOld = function () { return ; }; if(typeof(window.edInsertContent) != 'undefined'){ edInsertContentOld = window.edInsertContent; } window.edInsertContent = function (myField, myValue) { if(typeof(CKEDITOR) != 'undefined' && typeof(editorCKE) != 'undefined'){ editorCKE.insertHtml(myValue); } else { edInsertContentOld(myField, myValue); } }; var autosaveOld = function () { return ; }; if(typeof(window.autosave) != 'undefined'){ autosaveOld = window.autosave; } if(typeof(window.switchEditors) != 'undefined') { window.switchEditors.go = function(id, mode) { if ('tinymce' == mode || 'tmce' == mode) { jQuery('#'+id).closest('.html-active').removeClass('html-active').addClass('tmce-active'); ckeditorOn(id); } else { jQuery('#'+id).closest('.tmce-active').removeClass('tmce-active').addClass('html-active'); ckeditorOff(id); jQuery('.js .theEditor').attr('style', 'color: black;'); } }; } } //if qTranslate plugin enabled if ( ckeditorSettings.qtransEnabled ){ //custom version of switchEditors function when qTranslate plugin is enabled if(typeof(window.switchEditors) != 'undefined') { window.switchEditors.go = function(id, lang) { id = id || 'content'; lang = lang || 'toggle'; if ( 'toggle' == lang ) { if ( ed && !ed.isHidden() ) lang = 'html'; else lang = 'tmce'; } else if( 'tinymce' == lang ) lang = 'tmce'; var inst = tinyMCE.get('qtrans_textarea_' + id); var vta = document.getElementById('qtrans_textarea_' + id); var ta = document.getElementById(id); var wrap_id = 'wp-'+id+'-wrap'; // update merged content if(inst && ! inst.isHidden()) { tinyMCE.triggerSave(); } else { qtrans_save(vta.value); } // check if language is already active if(lang!='tmce' && lang!='html' && document.getElementById('qtrans_select_'+lang).className=='wp-switch-editor switch-tmce switch-html') { return; } if(lang!='tmce' && lang!='html') { document.getElementById('qtrans_select_'+qtrans_get_active_language()).className='wp-switch-editor'; document.getElementById('qtrans_select_'+lang).className='wp-switch-editor switch-tmce switch-html'; } if(lang=='html') { if ( inst && inst.isHidden() ) return false; if ( inst ) { vta.style.height = inst.getContentAreaContainer().offsetHeight + 20 + 'px'; inst.hide(); } jQuery("#"+wrap_id).removeClass('tmce-active'); jQuery("#"+wrap_id).addClass('html-active'); setUserSetting( 'editor', 'html' ); } else if(lang=='tmce') { if(inst && ! inst.isHidden()) return false; if ( tinyMCEPreInit.mceInit[id] && tinyMCEPreInit.mceInit[id].wpautop ) vta.value = this.wpautop(qtrans_use(qtrans_get_active_language(),ta.value)); if (inst) { inst.show(); } else { qtrans_hook_on_tinyMCE(id); } jQuery("#"+wrap_id).removeClass('html-active'); jQuery("#"+wrap_id).addClass('tmce-active'); setUserSetting('editor', 'tinymce'); } else { // switch content qtrans_assign('qtrans_textarea_'+id,qtrans_use(lang,ta.value)); } } } jQuery('#edButtonHTML').addClass('active'); jQuery('#edButtonPreview').removeClass('active'); if(ckeditorSettings.textarea_id != 'comment'){ ckeditorSettings.textarea_id = 'qtrans_textarea_content'; ckeditorSettings.configuration['on'].getData = function (evt) { evt.data.dataValue = evt.data.dataValue.replace(/(^<\/p>)|(<p>$)/g, ''); evt.data.dataValue = evt.data.dataValue.replace(/^<p>(\s|\n|\r)*<p>/g, '<p>'); evt.data.dataValue = evt.data.dataValue.replace(/<\/p>(\s|\n|\r)*<\/p>(\s|\n|\r)*$/g, '<\/p>'); qtrans_save(evt.data.dataValue); }; if ( jQuery('#'+ckeditorSettings.textarea_id).length && typeof CKEDITOR.instances[ckeditorSettings.textarea_id] == 'undefined' ) { CKEDITOR.replace(ckeditorSettings.textarea_id, ckeditorSettings.configuration); editorCKE = CKEDITOR.instances[ckeditorSettings.textarea_id]; //add afterCommandExec exect to last created CKEditor instance editorCKE.on( 'afterCommandExec', function(ev) { afterCommandEvent(ev); }); } window.tinyMCE = tinymce = getTinyMCEObject(); } }else { if(ckeditorSettings.autostart && (typeof getUserSetting == 'undefined' || getUserSetting('editor') === '' || getUserSetting('editor') == 'tinymce')){ ckeditorOn(); } } jQuery("#update-gallery").click(function(){ updateCkeGallery(); }); if (ckeditorSettings.excerpt_state && jQuery("textarea#excerpt").length > 0 && jQuery("#postexcerpt-hide").attr('checked') == 'checked') { //ckeditorOn('excerpt'); CKEDITOR.replace('excerpt', ckeditorSettings.configuration); } if (typeof window.tinyMCE != 'undefined') { if (typeof QTags != 'undefined') { jQuery(".row-actions span.reply a").live('click', function(){ if (typeof CKEDITOR.instances['replycontent'] != 'undefined') { ckeditorOff('replycontent'); } CKEDITOR.replace('replycontent', {'basicEntities' : false, 'entities': false,'toolbar_Comments' : [{ name: 'basicstyles', items : [ 'Bold','Italic','Underline'] }, { name: 'links', items : [ 'Link','Unlink' ] },{ name: 'paragraph', items : [ 'NumberedList','BulletedList'] }, { name: 'insert', items : [ 'Image' ] } ], 'toolbar' : 'Comments'}); }); jQuery("#replyrow a.save").unbind('click').live('click', function(){ var data = null; if (typeof CKEDITOR.instances['replycontent'] != 'undefined') { data = CKEDITOR.instances['replycontent'].getData(); } if (data != null && data.length > 0 ) { jQuery('textarea#replycontent').html(data); ckeditorOff('replycontent'); } commentReply.send(); return; }); jQuery("#replyrow a.cancel").unbind('click').live('click', function(){ commentReply.revert() ckeditorOff('replycontent'); return; }); QTags.getInstance = function (editor_id) { return window.tinyMCE; } } } }); function ckeditorOn(id) { var instance; if (typeof(id) != 'undefined' && typeof(CKEDITOR.instances[id]) == 'undefined' ) { setUserSetting( 'editor', 'tinymce' ); jQuery('#quicktags').hide(); jQuery('#edButtonPreview').addClass('active'); jQuery('#edButtonHTML').removeClass('active'); instance = CKEDITOR.replace(id, ckeditorSettings.configuration); } if ( jQuery('textarea#'+ckeditorSettings.textarea_id).length && (typeof(CKEDITOR.instances) == 'undefined' || typeof(CKEDITOR.instances[ckeditorSettings.textarea_id]) == 'undefined' ) && jQuery("#"+ckeditorSettings.textarea_id).parent().parent().attr('id') != 'quick-press') { instance = CKEDITOR.replace(ckeditorSettings.textarea_id, ckeditorSettings.configuration); if(ckeditorSettings.textarea_id == 'content') { setUserSetting( 'editor', 'tinymce' ); jQuery('#quicktags').hide(); jQuery('#edButtonPreview').addClass('active'); jQuery('#edButtonHTML').removeClass('active'); } else if(ckeditorSettings.textarea_id == 'comment') { var labelObj = jQuery('#'+ckeditorSettings.textarea_id).prev('label'); if (labelObj){ labelObj.hide(); } } } if (typeof(instance) != 'undefined') { //add afterCommandExec exect to last created CKEditor instance instance.on( 'afterCommandExec', function(ev) { afterCommandEvent(ev); }); } } function ckeditorOff(id) { if (typeof(id) != 'undefined') { editorCKE = CKEDITOR.instances[id]; }else { editorCKE = CKEDITOR.instances[ckeditorSettings.textarea_id]; } if(typeof(editorCKE) != 'undefined'){ editorCKE.destroy(); if(ckeditorSettings.textarea_id == 'content') { setUserSetting( 'editor', 'html' ); jQuery('#quicktags').show(); jQuery('#edButtonHTML').addClass('active'); jQuery('#edButtonPreview').removeClass('active'); } } } if ( !ckeditorSettings.qtransEnabled ){ var tinymce = window.tinyMCE = getTinyMCEObject(); } function getTinyMCEObject() { var tinymce = window.tinyMCE = (function () { var tinyMCE = { isOpera : function() { return CKEDITOR.env.opera; }, onAddEditor : { add : function() { // this function did nothing else apart from resizing TinyMCE } }, get : function (id) { var instant = { isHidden : function (){ editor = CKEDITOR.instances[id]; if (typeof editorCKE == 'undefined') editorCKE = editor; if(typeof(editor) != 'undefined') { return false; }else{ return true; } }, isDirty : function (){ return false; }, execCommand : function (command, integer, val) { if(command == 'mceSetContent') { editorCKE.setData(val); } if (command == 'mceInsertContent') { editorCKE.insertHtml(val); } }, onSaveContent : { add : function (func) { window.tinymceosc = func; } }, getContentAreaContainer : function () { return { offsetHeight : editorCKE.config.height }; }, hide : function () { ckeditorOff(id); }, show : function () { ckeditorOn(id); }, save : function(){ return; }, focus : function(){ return; }, plugins: {} }; return instant; }, execCommand : function (command, integer, val) { if(command == 'mceAddControl'){ ckeditorSettings.textarea_id = val; if(ckeditorSettings.autostart) { ckeditorOn(); } else { document.getElementById('qtrans_textarea_content').removeAttribute('style'); } } }, triggerSave : function(param) { if(typeof(CKEDITOR) != 'undefined' && typeof(editorCKE) != 'undefined') editorCKE.updateElement(); }, activeEditor : { isHidden : function (){ return false; }, isDirty : function (){ return false; }, focus : function (){ return; }, plugins : {}, execCommand : function(command, state, text) { if (command == "mceInsertContent") { //test if image has caption and make necessary text format pattern = /\[caption(.*)\]<.*>(.*)\[\/caption\]/i; if (pattern.test(text)) { replace_match = pattern.exec(text); text = text.replace(/<img (.*) \/ alt="javascript - wordpress 3.8.1 版本安装 ck编辑器插件 4.0 js错误 Uncaught TypeError: Cannot read property 'add' of undefined" >/g, function( match, cont ) { cont = cont.replace(/class="(.*)"/g, function( match, cont ){ tmp = 'class="' + cont + ' wp-caption"'; return tmp; }); tmp = '<img ' + cont + ' data-cke-caption=\'' + replace_match[1] + '\' data-cke-caption-text=\'' + replace_match[2] + '\' / alt="javascript - wordpress 3.8.1 版本安装 ck编辑器插件 4.0 js错误 Uncaught TypeError: Cannot read property 'add' of undefined" >' ; return tmp; }); } //setTimeout is required in IE8 when inserting Image gallery from an external modal dialog if (typeof editorCKE == 'undefined') editorCKE = CKEDITOR.instances[ckeditorSettings.textarea_id]; setTimeout(function(){ editorCKE.insertHtml(text); }, 0); } }, selection : { getBookmark : function(name) { return ''; } }, windowManager : { bookmark: {} } }, EditorManager :{ activeEditor: { selection : { getNode : function(){ var obj = jQuery(editorCKE.document.getBody().getHtml()); var index = 0; jQuery.each(obj,function(i, val){ var images = jQuery("img",jQuery(val)); jQuery.each(images, function(key, value){ if (jQuery(value).hasClass('wpGallery, cke_wpgallery')) { index = i; return; } }); }); if (obj.length === 0) { obj = document.createElement("p"); return obj; } return obj[index]; }, getBookmark : function(name) { return ; } }, dom :{ select : function(selector) { //get CKEditor content var obj = editorCKE.document.getBody().getHtml(); images = editorCKE.document.getElementsByTag('img'); if ( typeof images.$ == 'undefined' || images.$.length == 0) return []; for (var i in images.$) { if ( typeof images.$[i] != 'undefined' && ((CKEDITOR.env.ie && images.$[i].className == 'wpGallery, cke_wpgallery') || images.$[i].classList == 'wpGallery, cke_wpgallery')) { var element = new CKEDITOR.dom.element(images.$[i]); index = i; break; } } var results =[]; if (typeof element != 'undefined') { results[0] = images.$[index]; return results; }else { return []; } }, getAttrib : function(el, selector) { return jQuery(el).attr(selector); }, //function to set new gallery attributes setAttrib : function(el, selector, value) { //get CKEditor content var obj = editorCKE.document.getBody().getHtml(); images = editorCKE.document.getElementsByTag('img'); for (var i in images.$) { if ( typeof images.$[i] != 'undefined' && ((CKEDITOR.env.ie && images.$[i].className == 'wpGallery, cke_wpgallery') || images.$[i].classList == 'wpGallery, cke_wpgallery')) { var element = new CKEDITOR.dom.element(images.$[i]); element.setAttribute('title', value); element.setAttribute('data-gallery', '['+value+']'); } } }, decode : function(text) { return text; }, hasClass : function(element, name) { var hasClass = jQuery(element).attr('class'); var pattern = /wpGallery/; return pattern.test(hasClass); } } }, get : function(id) {return;} }, DOM :{ removeClass : function(id, className) {return;}, addClass : function(id, className) {return;} }, addI18n : function(language, param){ return ; } }; return tinyMCE; })(); return tinymce; } var tinyMCEPreInit = { mceInit : function(){ language : 'en'; } }; var tinyMCEPopup = { onInit : { add : function() {return ;} }, editor : { windowManager : { createInstance : function(id) {return; } } } }; /* * Function to move cursor after fake gallery image. Turn on frame show */ function updateCkeGallery() { jQuery("#add_image").unbind('click'); jQuery("#add_image").bind('click',function(){ return true; }); } function afterCommandEvent(ev) { if (ev.data.name != 'maximize') { return; } //if maximize button was clicked hide/show WP admin bar - prevention of hiding buttton under WP admin bar if (ev.data.command.state == CKEDITOR.TRISTATE_ON) { jQuery("#wpadminbar").hide() } else { jQuery("#wpadminbar").show() } }
回复内容:
安装插件后 不能正常预览
问题代码区域
c.onSubmit.add(function() {}) 的错误
下面是 wp中的js代码 那位大什么帮忙 解读一番也好
run: function() { var b = this; this.checkPost(), this.schedule = a.schedule({ time: 15e3, func: function() { wp.autosave.local.save() }, repeat: !0, protect: !0 }), a("form#post").on("submit.autosave-local", function() { var c = "undefined" != typeof tinymce && tinymce.get("content"), d = a("#post_ID").val() || 0; c && !c.isHidden() ? c.onSubmit.add(function() { wp.autosave.local.save({ post_title: a("#title").val() || "", content: a("#content").val() || "", excerpt: a("#excerpt").val() || "" }) }) : b.save({ post_title: a("#title").val() || "", content: a("#content").val() || "", excerpt: a("#excerpt").val() || "" }), wpCookies.set("wp-saving-post-" + d, "check") }) },
在autosave.min.js文件中
错误提示 Uncaught TypeError: Cannot read property 'add' of undefined
没太看懂这个js 关键是 ckeditor.utils.js 和这个文件的关系 以及 如何调用,作用域是什么完全搞不清楚。
<br>function autosave_parse_response(a) { var b, c, d = wpAjax.parseAjaxResponse(a, "autosave"); return d && d.responses && d.responses.length && (d.responses[0].supplemental && (c = d.responses[0].supplemental, jQuery.each(c, function(a, b) { a.match(/^replace-/) && jQuery("#" + a.replace("replace-", "")).val(b) })), d.errors || ((b = parseInt(d.responses[0].id, 10)) && autosave_update_slug(b), d.responses[0].data && jQuery(".autosave-message").text(d.responses[0].data))), d } function autosave_saved(a) { blockSave = !1, autosave_parse_response(a), autosave_enable_buttons() } function autosave_saved_new(a) { blockSave = !1; var b, c = autosave_parse_response(a); c && c.responses.length && !c.errors ? (b = parseInt(c.responses[0].id, 10), b && (notSaved = !1, jQuery("#auto_draft").val("0")), autosave_enable_buttons(), autosaveDelayPreview && (autosaveDelayPreview = !1, doPreview())) : autosave_enable_buttons() } function autosave_update_slug(a) { "undefined" != makeSlugeditClickable && jQuery.isFunction(makeSlugeditClickable) && !jQuery("#edit-slug-box > *").size() && jQuery.post(ajaxurl, { action: "sample-permalink", post_id: a, new_title: fullscreen && fullscreen.settings.visible ? jQuery("#wp-fullscreen-title").val() : jQuery("#title").val(), samplepermalinknonce: jQuery("#samplepermalinknonce").val() }, function(a) { if ("-1" !== a) { var b = jQuery("#edit-slug-box"); b.html(a), b.hasClass("hidden") && b.fadeIn("fast", function() { b.removeClass("hidden") }), makeSlugeditClickable() } }) } function autosave_loading() { jQuery(".autosave-message").html(autosaveL10n.savingText) } function autosave_enable_buttons() { jQuery(document).trigger("autosave-enable-buttons"), wp.heartbeat && wp.heartbeat.hasConnectionError() || setTimeout(function() { var a = jQuery("#submitpost"); a.find(":button, :submit").removeAttr("disabled"), a.find(".spinner").hide() }, 500) } function autosave_disable_buttons() { jQuery(document).trigger("autosave-disable-buttons"), jQuery("#submitpost").find(":button, :submit").prop("disabled", !0), setTimeout(autosave_enable_buttons, 5e3) } function delayed_autosave() { setTimeout(function() { blockSave || autosave() }, 200) } var autosave, autosavePeriodical, fullscreen, doPreview, autosaveLast = "", autosaveDelayPreview = !1, notSaved = !0, blockSave = !1, autosaveLockRelease = !0; jQuery(document).ready(function(a) { autosaveLast = a("#wp-content-wrap").hasClass("tmce-active") && "undefined" != typeof switchEditors ? wp.autosave.getCompareString({ post_title: a("#title").val() || "", content: switchEditors.pre_wpautop(a("#content").val()) || "", excerpt: a("#excerpt").val() || "" }) : wp.autosave.getCompareString(), autosavePeriodical = a.schedule({ time: 1e3 * autosaveL10n.autosaveInterval, func: function() { autosave() }, repeat: !0, protect: !0 }), a("#post").submit(function() { a.cancel(autosavePeriodical), autosaveLockRelease = !1 }), a('input[type="submit"], a.submitdelete', "#submitpost").click(function() { blockSave = !0, window.onbeforeunload = null, a(":button, :submit", "#submitpost").each(function() { var b = a(this); b.hasClass("button-primary") ? b.addClass("button-primary-disabled") : b.addClass("button-disabled") }), "publish" == a(this).attr("id") ? a("#major-publishing-actions .spinner").show() : a("#minor-publishing .spinner").show() }), window.onbeforeunload = function() { var b, c = "undefined" != typeof tinymce ? tinymce.activeEditor : !1; if (c && !c.isHidden()) { if (c.isDirty()) return autosaveL10n.saveAlert } else if (b = fullscreen && fullscreen.settings.visible ? wp.autosave.getCompareString({ post_title: a("#wp-fullscreen-title").val() || "", content: a("#wp_mce_fullscreen").val() || "", excerpt: a("#excerpt").val() || "" }) : wp.autosave.getCompareString(), b != autosaveLast) return autosaveL10n.saveAlert }, a(window).unload(function(b) { autosaveLockRelease && (b.target && "#document" != b.target.nodeName || a.ajax({ type: "POST", url: ajaxurl, async: !1, data: { action: "wp-remove-post-lock", _wpnonce: a("#_wpnonce").val(), post_ID: a("#post_ID").val(), active_post_lock: a("#active_post_lock").val() } })) }), a("#post-preview").click(function() { return "1" == a("#auto_draft").val() && notSaved ? (autosaveDelayPreview = !0, autosave(), !1) : (doPreview(), !1) }), doPreview = function() { a("input#wp-preview").val("dopreview"), a("form#post").attr("target", "wp-preview").submit().attr("target", ""); var b = navigator.userAgent.toLowerCase(); - 1 != b.indexOf("safari") && -1 == b.indexOf("chrome") && a("form#post").attr("action", function(a, b) { return b + "?t=" + (new Date).getTime() }), a("input#wp-preview").val("") }, a("#title").on("keydown.editor-focus", function(b) { var c; 9 == b.which && (b.ctrlKey || b.altKey || b.shiftKey || ("undefined" != typeof tinymce && (c = tinymce.get("content")), c && !c.isHidden() ? a(this).one("keyup", function() { a("#content_tbl td.mceToolbar > a").focus() }) : a("#content").focus(), b.preventDefault())) }), "1" == a("#auto_draft").val() && a("#title").blur(function() { this.value && "1" == a("#auto_draft").val() && delayed_autosave() }), a(document).on("heartbeat-connection-lost.autosave", function(b, c, d) { if ("timeout" === c || 503 == d) { var e = a("#lost-connection-notice"); wp.autosave.local.hasStorage || e.find(".hide-if-no-sessionstorage").hide(), e.show(), autosave_disable_buttons() } }).on("heartbeat-connection-restored.autosave", function() { a("#lost-connection-notice").hide(), autosave_enable_buttons() }) }), autosave = function() { var a, b, c = wp.autosave.getPostData(); return blockSave = !0, c.autosave ? "block" == jQuery("#TB_window").css("display") ? !1 : (a = wp.autosave.getCompareString(c), a == autosaveLast ? !1 : (autosaveLast = a, jQuery(document).triggerHandler("wpcountwords", [c.content]), autosave_disable_buttons(), b = "1" == c.auto_draft ? autosave_saved_new : autosave_saved, jQuery.ajax({ data: c, beforeSend: autosave_loading, type: "POST", url: ajaxurl, success: b }), !0)) : !1 }, window.wp = window.wp || {}, wp.autosave = wp.autosave || {}, function(a) { wp.autosave.getPostData = function() { var b, c, d = "undefined" != typeof tinymce ? tinymce.activeEditor : null, e = [], f = { action: "autosave", autosave: !0, post_id: a("#post_ID").val() || 0, autosavenonce: a("#autosavenonce").val() || "", post_type: a("#post_type").val() || "", post_author: a("#post_author").val() || "", excerpt: a("#excerpt").val() || "" }; if (d && !d.isHidden()) { if (d.plugins.spellchecker && d.plugins.spellchecker.active) return f.autosave = !1, f; "mce_fullscreen" == d.id && tinymce.get("content").setContent(d.getContent({ format: "raw" }), { format: "raw" }), tinymce.triggerSave() } return "undefined" != typeof fullscreen && fullscreen.settings.visible ? (f.post_title = a("#wp-fullscreen-title").val() || "", f.content = a("#wp_mce_fullscreen").val() || "") : (f.post_title = a("#title").val() || "", f.content = a("#content").val() || ""), a('input[id^="in-category-"]:checked').each(function() { e.push(this.value) }), f.catslist = e.join(","), (b = a("#post_name").val()) && (f.post_name = b), (c = a("#parent_id").val()) && (f.parent_id = c), a("#comment_status").prop("checked") && (f.comment_status = "open"), a("#ping_status").prop("checked") && (f.ping_status = "open"), "1" == a("#auto_draft").val() && (f.auto_draft = "1"), f }, wp.autosave.getCompareString = function(b) { return "object" == typeof b ? (b.post_title || "") + "::" + (b.content || "") + "::" + (b.excerpt || "") : (a("#title").val() || "") + "::" + (a("#content").val() || "") + "::" + (a("#excerpt").val() || "") }, wp.autosave.local = { lastSavedData: "", blog_id: 0, hasStorage: !1, checkStorage: function() { var a = Math.random(), b = !1; try { sessionStorage.setItem("wp-test", a), b = sessionStorage.getItem("wp-test") == a, sessionStorage.removeItem("wp-test") } catch (c) {} return this.hasStorage = b, b }, getStorage: function() { var a = !1; return this.hasStorage && this.blog_id && (a = sessionStorage.getItem("wp-autosave-" + this.blog_id), a = a ? JSON.parse(a) : {}), a }, setStorage: function(a) { var b; return this.hasStorage && this.blog_id ? (b = "wp-autosave-" + this.blog_id, sessionStorage.setItem(b, JSON.stringify(a)), null !== sessionStorage.getItem(b)) : !1 }, getData: function() { var b = this.getStorage(), c = a("#post_ID").val(); return b && c ? b["post_" + c] || !1 : !1 }, setData: function(b) { var c = this.getStorage(), d = a("#post_ID").val(); if (!c || !d) return !1; if (b) c["post_" + d] = b; else { if (!c.hasOwnProperty("post_" + d)) return !1; delete c["post_" + d] } return this.setStorage(c) }, save: function(b) { var c, d, e = !1; return b ? (c = this.getData() || {}, a.extend(c, b), c.autosave = !0) : c = wp.autosave.getPostData(), c.autosave ? (d = wp.autosave.getCompareString(c), d == this.lastSavedData ? !1 : (c.save_time = (new Date).getTime(), c.status = a("#post_status").val() || "", e = this.setData(c), e && (this.lastSavedData = d), e)) : !1 }, init: function(b) { var c = this; this.checkStorage() && (a("#content").length || a("#excerpt").length) && (b && a.extend(this, b), this.blog_id || (this.blog_id = "undefined" != typeof window.autosaveL10n ? window.autosaveL10n.blog_id : 0), a(document).ready(function() { c.run() })) }, run: function() { var b = this; this.checkPost(), this.schedule = a.schedule({ time: 15e3, func: function() { wp.autosave.local.save() }, repeat: !0, protect: !0 }), a("form#post").on("submit.autosave-local", function() { var c = "undefined" != typeof tinymce && tinymce.get("content"), d = a("#post_ID").val() || 0; c && !c.isHidden() ? c.onSubmit.add(function() { wp.autosave.local.save({ post_title: a("#title").val() || "", content: a("#content").val() || "", excerpt: a("#excerpt").val() || "" }) }) : b.save({ post_title: a("#title").val() || "", content: a("#content").val() || "", excerpt: a("#excerpt").val() || "" }), wpCookies.set("wp-saving-post-" + d, "check") }) }, compare: function(a, b) { function c(a) { return a.toString().replace(/[\x20\t\r\n\f]+/g, "") } return c(a || "") == c(b || "") }, checkPost: function() { var b, c, d, e, f = this, g = this.getData(), h = a("#post_ID").val() || 0, i = wpCookies.get("wp-saving-post-" + h); if (g) return i && (wpCookies.remove("wp-saving-post-" + h), "saved" == i) ? (this.setData(!1), void 0) : (a("#has-newer-autosave").length || (b = a("#content").val() || "", c = a("#title").val() || "", d = a("#excerpt").val() || "", a("#wp-content-wrap").hasClass("tmce-active") && "undefined" != typeof switchEditors && (b = switchEditors.pre_wpautop(b)), "check" != i && this.compare(b, g.content) && this.compare(c, g.post_title) && this.compare(d, g.excerpt) || (this.restore_post_data = g, this.undo_post_data = { content: b, post_title: c, excerpt: d }, e = a("#local-storage-notice"), a(".wrap h2").first().after(e.addClass("updated").show()), e.on("click", function(b) { var c = a(b.target); c.hasClass("restore-backup") ? (f.restorePost(f.restore_post_data), c.parent().hide(), a(this).find("p.undo-restore").show()) : c.hasClass("undo-restore-backup") && (f.restorePost(f.undo_post_data), c.parent().hide(), a(this).find("p.local-restore").show()), b.preventDefault() }))), void 0) }, restorePost: function(b) { var c; return b ? (this.lastSavedData = wp.autosave.getCompareString(b), a("#title").val() != b.post_title && a("#title").focus().val(b.post_title || ""), a("#excerpt").val(b.excerpt || ""), c = "undefined" != typeof tinymce && tinymce.get("content"), c && !c.isHidden() && "undefined" != typeof switchEditors ? (c.undoManager.add(), c.setContent(b.content ? switchEditors.wpautop(b.content) : "")) : (a("#content-html").click(), a("#content").val(b.content)), !0) : !1 } }, wp.autosave.local.init() }(jQuery);
ckeditor 中的js
<code class="lang-javascript"><br><br>var editorCKE; jQuery(document).ready(function () { ckeditorSettings.configuration['on'] = { configLoaded : function ( evt ) { if (typeof(ckeditorSettings.externalPlugins) != 'undefined') { var externals=new Array(); for (var x in ckeditorSettings.externalPlugins) { CKEDITOR.plugins.addExternal(x, ckeditorSettings.externalPlugins[x]); externals.push(x); } } evt.editor.config.extraPlugins += (evt.editor.config.extraPlugins ? ','+externals.join(',') : externals.join(',')); if (evt.editor.config[evt.editor.config.toolbar +'_removeButtons']); evt.editor.config.removeButtons = evt.editor.config[evt.editor.config.toolbar +'_removeButtons']; CKEDITOR.addCss(evt.editor.config.extraCss); } }; CKEDITOR.on( 'instanceReady', function( ev ) { var dtd = CKEDITOR.dtd; for ( var e in CKEDITOR.tools.extend( {}, dtd.$nonBodyContent, dtd.$block, dtd.$listItem, dtd.$tableContent ) ) { ev.editor.dataProcessor.writer.setRules( e, ckeditorSettings.outputFormat); } ev.editor.dataProcessor.writer.setRules( 'br', { breakAfterOpen : true }); ev.editor.dataProcessor.writer.setRules( 'pre', { indent: false }); editorCKE = CKEDITOR.instances['content']; }); if (ckeditorSettings.textarea_id != 'comment'){ edInsertContentOld = function () { return ; }; if(typeof(window.edInsertContent) != 'undefined'){ edInsertContentOld = window.edInsertContent; } window.edInsertContent = function (myField, myValue) { if(typeof(CKEDITOR) != 'undefined' && typeof(editorCKE) != 'undefined'){ editorCKE.insertHtml(myValue); } else { edInsertContentOld(myField, myValue); } }; var autosaveOld = function () { return ; }; if(typeof(window.autosave) != 'undefined'){ autosaveOld = window.autosave; } if(typeof(window.switchEditors) != 'undefined') { window.switchEditors.go = function(id, mode) { if ('tinymce' == mode || 'tmce' == mode) { jQuery('#'+id).closest('.html-active').removeClass('html-active').addClass('tmce-active'); ckeditorOn(id); } else { jQuery('#'+id).closest('.tmce-active').removeClass('tmce-active').addClass('html-active'); ckeditorOff(id); jQuery('.js .theEditor').attr('style', 'color: black;'); } }; } } //if qTranslate plugin enabled if ( ckeditorSettings.qtransEnabled ){ //custom version of switchEditors function when qTranslate plugin is enabled if(typeof(window.switchEditors) != 'undefined') { window.switchEditors.go = function(id, lang) { id = id || 'content'; lang = lang || 'toggle'; if ( 'toggle' == lang ) { if ( ed && !ed.isHidden() ) lang = 'html'; else lang = 'tmce'; } else if( 'tinymce' == lang ) lang = 'tmce'; var inst = tinyMCE.get('qtrans_textarea_' + id); var vta = document.getElementById('qtrans_textarea_' + id); var ta = document.getElementById(id); var wrap_id = 'wp-'+id+'-wrap'; // update merged content if(inst && ! inst.isHidden()) { tinyMCE.triggerSave(); } else { qtrans_save(vta.value); } // check if language is already active if(lang!='tmce' && lang!='html' && document.getElementById('qtrans_select_'+lang).className=='wp-switch-editor switch-tmce switch-html') { return; } if(lang!='tmce' && lang!='html') { document.getElementById('qtrans_select_'+qtrans_get_active_language()).className='wp-switch-editor'; document.getElementById('qtrans_select_'+lang).className='wp-switch-editor switch-tmce switch-html'; } if(lang=='html') { if ( inst && inst.isHidden() ) return false; if ( inst ) { vta.style.height = inst.getContentAreaContainer().offsetHeight + 20 + 'px'; inst.hide(); } jQuery("#"+wrap_id).removeClass('tmce-active'); jQuery("#"+wrap_id).addClass('html-active'); setUserSetting( 'editor', 'html' ); } else if(lang=='tmce') { if(inst && ! inst.isHidden()) return false; if ( tinyMCEPreInit.mceInit[id] && tinyMCEPreInit.mceInit[id].wpautop ) vta.value = this.wpautop(qtrans_use(qtrans_get_active_language(),ta.value)); if (inst) { inst.show(); } else { qtrans_hook_on_tinyMCE(id); } jQuery("#"+wrap_id).removeClass('html-active'); jQuery("#"+wrap_id).addClass('tmce-active'); setUserSetting('editor', 'tinymce'); } else { // switch content qtrans_assign('qtrans_textarea_'+id,qtrans_use(lang,ta.value)); } } } jQuery('#edButtonHTML').addClass('active'); jQuery('#edButtonPreview').removeClass('active'); if(ckeditorSettings.textarea_id != 'comment'){ ckeditorSettings.textarea_id = 'qtrans_textarea_content'; ckeditorSettings.configuration['on'].getData = function (evt) { evt.data.dataValue = evt.data.dataValue.replace(/(^)|(<p>$)/g, ''); evt.data.dataValue = evt.data.dataValue.replace(/^</p> <p>(\s|\n|\r)*</p> <p>/g, '</p> <p>'); evt.data.dataValue = evt.data.dataValue.replace(/(\s|\n|\r)*(\s|\n|\r)*$/g, ''); qtrans_save(evt.data.dataValue); }; if ( jQuery('#'+ckeditorSettings.textarea_id).length && typeof CKEDITOR.instances[ckeditorSettings.textarea_id] == 'undefined' ) { CKEDITOR.replace(ckeditorSettings.textarea_id, ckeditorSettings.configuration); editorCKE = CKEDITOR.instances[ckeditorSettings.textarea_id]; //add afterCommandExec exect to last created CKEditor instance editorCKE.on( 'afterCommandExec', function(ev) { afterCommandEvent(ev); }); } window.tinyMCE = tinymce = getTinyMCEObject(); } }else { if(ckeditorSettings.autostart && (typeof getUserSetting == 'undefined' || getUserSetting('editor') === '' || getUserSetting('editor') == 'tinymce')){ ckeditorOn(); } } jQuery("#update-gallery").click(function(){ updateCkeGallery(); }); if (ckeditorSettings.excerpt_state && jQuery("textarea#excerpt").length > 0 && jQuery("#postexcerpt-hide").attr('checked') == 'checked') { //ckeditorOn('excerpt'); CKEDITOR.replace('excerpt', ckeditorSettings.configuration); } if (typeof window.tinyMCE != 'undefined') { if (typeof QTags != 'undefined') { jQuery(".row-actions span.reply a").live('click', function(){ if (typeof CKEDITOR.instances['replycontent'] != 'undefined') { ckeditorOff('replycontent'); } CKEDITOR.replace('replycontent', {'basicEntities' : false, 'entities': false,'toolbar_Comments' : [{ name: 'basicstyles', items : [ 'Bold','Italic','Underline'] }, { name: 'links', items : [ 'Link','Unlink' ] },{ name: 'paragraph', items : [ 'NumberedList','BulletedList'] }, { name: 'insert', items : [ 'Image' ] } ], 'toolbar' : 'Comments'}); }); jQuery("#replyrow a.save").unbind('click').live('click', function(){ var data = null; if (typeof CKEDITOR.instances['replycontent'] != 'undefined') { data = CKEDITOR.instances['replycontent'].getData(); } if (data != null && data.length > 0 ) { jQuery('textarea#replycontent').html(data); ckeditorOff('replycontent'); } commentReply.send(); return; }); jQuery("#replyrow a.cancel").unbind('click').live('click', function(){ commentReply.revert() ckeditorOff('replycontent'); return; }); QTags.getInstance = function (editor_id) { return window.tinyMCE; } } } }); function ckeditorOn(id) { var instance; if (typeof(id) != 'undefined' && typeof(CKEDITOR.instances[id]) == 'undefined' ) { setUserSetting( 'editor', 'tinymce' ); jQuery('#quicktags').hide(); jQuery('#edButtonPreview').addClass('active'); jQuery('#edButtonHTML').removeClass('active'); instance = CKEDITOR.replace(id, ckeditorSettings.configuration); } if ( jQuery('textarea#'+ckeditorSettings.textarea_id).length && (typeof(CKEDITOR.instances) == 'undefined' || typeof(CKEDITOR.instances[ckeditorSettings.textarea_id]) == 'undefined' ) && jQu</p></code>

PHP에서, 특성은 방법 재사용이 필요하지만 상속에 적합하지 않은 상황에 적합합니다. 1) 특성은 클래스에서 다중 상속의 복잡성을 피할 수 있도록 수많은 방법을 허용합니다. 2) 특성을 사용할 때는 대안과 키워드를 통해 해결할 수있는 방법 충돌에주의를 기울여야합니다. 3) 성능을 최적화하고 코드 유지 보수성을 향상시키기 위해 특성을 과도하게 사용해야하며 단일 책임을 유지해야합니다.

의존성 주입 컨테이너 (DIC)는 PHP 프로젝트에 사용하기위한 객체 종속성을 관리하고 제공하는 도구입니다. DIC의 주요 이점에는 다음이 포함됩니다. 1. 디커플링, 구성 요소 독립적 인 코드는 유지 관리 및 테스트가 쉽습니다. 2. 유연성, 의존성을 교체 또는 수정하기 쉽습니다. 3. 테스트 가능성, 단위 테스트를 위해 모의 객체를 주입하기에 편리합니다.

SplfixedArray는 PHP의 고정 크기 배열로, 고성능 및 메모리 사용이 필요한 시나리오에 적합합니다. 1) 동적 조정으로 인한 오버 헤드를 피하기 위해 생성 할 때 크기를 지정해야합니다. 2) C 언어 배열을 기반으로 메모리 및 빠른 액세스 속도를 직접 작동합니다. 3) 대규모 데이터 처리 및 메모리에 민감한 환경에 적합하지만 크기가 고정되어 있으므로주의해서 사용해야합니다.

PHP는 $ \ _ 파일 변수를 통해 파일 업로드를 처리합니다. 보안을 보장하는 방법에는 다음이 포함됩니다. 1. 오류 확인 확인, 2. 파일 유형 및 크기 확인, 3 파일 덮어 쓰기 방지, 4. 파일을 영구 저장소 위치로 이동하십시오.

JavaScript에서는 NullCoalescingOperator (??) 및 NullCoalescingAssignmentOperator (?? =)를 사용할 수 있습니다. 1. 2. ??= 변수를 오른쪽 피연산자의 값에 할당하지만 변수가 무효 또는 정의되지 않은 경우에만. 이 연산자는 코드 로직을 단순화하고 가독성과 성능을 향상시킵니다.

CSP는 XSS 공격을 방지하고 리소스로드를 제한하여 웹 사이트 보안을 향상시킬 수 있기 때문에 중요합니다. 1.CSP는 HTTP 응답 헤더의 일부이며 엄격한 정책을 통해 악의적 인 행동을 제한합니다. 2. 기본 사용법은 동일한 원점에서 자원을로드 할 수있는 것입니다. 3. 고급 사용량은 특정 도메인 이름을 스크립트와 스타일로드 할 수 있도록하는 것과 같은보다 세밀한 전략을 설정할 수 있습니다. 4. Content-Security Policy 보고서 전용 헤더를 사용하여 CSP 정책을 디버그하고 최적화하십시오.

HTTP 요청 방법에는 각각 리소스를 확보, 제출, 업데이트 및 삭제하는 데 사용되는 Get, Post, Put and Delete가 포함됩니다. 1. GET 방법은 리소스를 얻는 데 사용되며 읽기 작업에 적합합니다. 2. 게시물은 데이터를 제출하는 데 사용되며 종종 새로운 리소스를 만드는 데 사용됩니다. 3. PUT 방법은 리소스를 업데이트하는 데 사용되며 완전한 업데이트에 적합합니다. 4. 삭제 방법은 자원을 삭제하는 데 사용되며 삭제 작업에 적합합니다.

HTTPS는 HTTP를 기반으로 보안 계층을 추가하는 프로토콜로, 주로 암호화 된 데이터를 통해 사용자 개인 정보 및 데이터 보안을 보호합니다. 작업 원칙에는 TLS 핸드 셰이크, 인증서 확인 및 암호화 된 커뮤니케이션이 포함됩니다. HTTP를 구현할 때는 인증서 관리, 성능 영향 및 혼합 콘텐츠 문제에주의를 기울여야합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

드림위버 CS6
시각적 웹 개발 도구

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

뜨거운 주제



