帝国cms 7.5+utf8下测试完美。
// by jiuhecai // <script src='/e/extend/insertpic/insertpic.js'></script>
// == 配置区域(按需修改) == const CONFIG = { editorId: 'newstext', // 编辑器对应的textarea ID imageUrl: 'http://xunsearch.75utf8.com/e/extend/insertpic/insertpic.jpeg', // 固定图片URL buttonText: '📷 插入图片', // 按钮文字(或使用图标) buttonTitle: '插入预设图片' // 按钮悬停提示 };
// == 核心代码(无需修改) == (function() { let injected = false; // 防止重复注入
// 1. 创建自定义按钮 function createButton() { const btn = document.createElement('button'); btn.type = 'button'; btn.title = CONFIG.buttonTitle; btn.innerHTML = CONFIG.buttonText; btn.style.cssText = ` margin:0 4px; padding:6px 8px; border:1px solid #ddd; background:#f8f8f8; cursor:pointer; border-radius:3px; `; // 绑定点击事件 btn.addEventListener('click', () => { const editor = CKEDITOR.instances[CONFIG.editorId]; if (editor) { editor.insertHtml(`<img src="${CONFIG.imageUrl}" alt="预设图片" style="max-width:100%; height:auto; display:block; margin:10px 0;">`); } }); return btn; }
// 2. 检测编辑器框架加载 function checkEditor() { // 优先检测 iframe 模式 return document.querySelector('.cke_top'); const iframe = document.querySelector('.cke_wysiwyg_frame'); if (iframe) { const doc = iframe.contentDocument || iframe.contentWindow.document; return doc.querySelector('.cke_top'); } // 普通模式 return document.querySelector('.cke_top'); }
// 3. MutationObserver 配置 const observer = new MutationObserver(mutations => { if (injected) return; const toolbar = checkEditor(); if (toolbar) { // 插入按钮到工具栏右侧 const container = toolbar.querySelector('.cke_toolbar:last-child') || toolbar; container.after(createButton()); injected = true; // 标记已注入 observer.disconnect(); // 停止观察 } });
// 4. 启动监听 observer.observe(document, { subtree: true, childList: true, attributes: false, characterData: false });
// 5. 防御性检测(处理延迟加载) setTimeout(() => { if (!injected && checkEditor()) { observer.takeRecords().forEach(m => observer.observe(m.target, m)); } }, 3000); })();
|