UE.plugin.register('autosave', function (){ var me = this, //无限循环保护 lastSaveTime = new Date(), //最小保存间隔时间 MIN_TIME = 20, //auto save key saveKey = null; function save ( editor ) { var saveData; if ( new Date() - lastSaveTime < MIN_TIME ) { return; } if ( !editor.hasContents() ) { //这里不能调用命令来删除, 会造成事件死循环 saveKey && me.removePreferences( saveKey ); return; } lastSaveTime = new Date(); editor._saveFlag = null; saveData = me.body.innerHTML; if ( editor.fireEvent( "beforeautosave", { content: saveData } ) === false ) { return; } me.setPreferences( saveKey, saveData ); editor.fireEvent( "afterautosave", { content: saveData } ); } return { defaultOptions: { //默认间隔时间 saveInterval: 500, enableAutoSave: true }, bindEvents:{ 'ready':function(){ var _suffix = "-drafts-data", key = null; if ( me.key ) { key = me.key + _suffix; } else { key = ( me.container.parentNode.id || 'ue-common' ) + _suffix; } //页面地址+编辑器ID 保持唯一 saveKey = ( location.protocol + location.host + location.pathname ).replace( /[.:\/]/g, '_' ) + key; }, 'contentchange': function () { if (!me.getOpt('enableAutoSave')) { return; } if ( !saveKey ) { return; } if ( me._saveFlag ) { window.clearTimeout( me._saveFlag ); } if ( me.options.saveInterval > 0 ) { me._saveFlag = window.setTimeout( function () { save( me ); }, me.options.saveInterval ); } else { save(me); } } }, commands:{ 'clearlocaldata':{ execCommand:function (cmd, name) { if ( saveKey && me.getPreferences( saveKey ) ) { me.removePreferences( saveKey ) } }, notNeedUndo: true, ignoreContentChange:true }, 'getlocaldata':{ execCommand:function (cmd, name) { return saveKey ? me.getPreferences( saveKey ) || '' : ''; }, notNeedUndo: true, ignoreContentChange:true }, 'drafts':{ execCommand:function (cmd, name) { if ( saveKey ) { me.body.innerHTML = me.getPreferences( saveKey ) || '
'+domUtils.fillHtml+'
'; me.focus(true); } }, queryCommandState: function () { return saveKey ? ( me.getPreferences( saveKey ) === null ? -1 : 0 ) : -1; }, notNeedUndo: true, ignoreContentChange:true } } } });