我处于一个好奇的情况,我以前没有任何问题来实现我正在寻找的东西.以下代码是
HTML页面的一部分,用于托管TinyMCE丰富的文本框:
... <textarea id="editing_field">This text is supposed to appear in the rich textBox</textarea> ...
起初,这是按照意图进行的,创建一个包含文本的富文本框.在某些时候,TinyMCE代码决定将textarea HTML转换为以下内容:
<textarea id="editing_field" style="display: none;"/> This text is supposed to appear in the rich textBox
这将使文本框下方的文本不完全理想.我不知道是什么导致这种行为的变化,虽然我也使用jQuery与它,如果这可以有任何影响.
我可以通过在页面加载后将内容加载到文本框中来解决问题,通过使用ajax或通过在HTML中隐藏文本,并将其移动.但是,如果可能,我想直接从PHP发送文本到文本框中.任何人都知道这里发生了什么,如何解决?
更新2:我已经成功地转载了导致行为变化的情况:起初我刚刚在第一个代码片段中的textarea中有纯文本.但是,保存内容后,文本将如下所示:
<p>This text is supposed to appear in the rich textBox</p>
p标签的存在导致TinyMCE触发封闭文本区到仅一个标签的文本区域之间的转换(如上所示).
tinyMCE.init({ // General options mode : "exact",elements : "editing_field",theme : "advanced",skin : "o2k7",skin_variant : "black",plugins : "safari,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template",save_onsavecallback : "saveContent",// Theme options theme_advanced_buttons1 : "save,newdocument,|,bold,italic,underline,strikethrough,justifyleft,justifycenter,justifyright,justifyfull",theme_advanced_buttons2 : "search,replace,bullist,numlist,outdent,indent,blockquote,undo,redo,forecolor,backcolor",theme_advanced_buttons3 : "hr,removeformat,sub,sup,charmap,code",theme_advanced_buttons4 : "styleselect,formatselect,fontselect,fontsizeselect",theme_advanced_toolbar_location : "top",theme_advanced_toolbar_align : "left",theme_advanced_statusbar_location : "bottom",theme_advanced_resizing : false,// Drop lists for link/image/media/template dialogs template_external_list_url : "lists/template_list.js",external_link_list_url : "lists/link_list.js",external_image_list_url : "lists/image_list.js",media_external_list_url : "lists/media_list.js",// Replace values for the template plugin template_replace_values : { username : "Some User",staffid : "991234" },width : "450",height : "500" });
解决方法
如果您不调用tinyMCE的JavaScript函数,则可能需要处理浏览器兼容性问题.
如果您在页面上只有一个锡纸盒,您可以这样做:
tinyMCE.activeEditor.setContent('<span>some</span>');
您也可以设置BBCode等格式.查看setContent文档.
我会让您的PHP代码将HTML转换为JavaScript函数,并使用onload进行调用:
function loadTinyMCE($html) { echo " <script type="text/javascript">function loadDefaultTinyMCEContent(){ tinyMCE.activeEditor.setContent('$html'); }</script> "; }
然后
<body onload="loadDefaultTinyMCEContent()">
如果您不想使用页面onload事件,则tinymce具有名为oninit的init选项,功能类似.
或者,setupcontent_callback可以直接访问iframe.