我使用了古老版本的tinyMCE已有10年了,没有任何问题。 majorVersion:“ 3”,minorVersion:“ 2.7”,发行日期:“ 2009-09-22”由于没有问题,而且它确实可以实现我想要的功能,所以我从不费心升级到新版本。要实现较新的版本,将需要更改每个至少使用tinyMCE的脚本来引用新文件名tinymce.min.js。但是突然我调用tinMCE.init时出现以下错误,并且没有转换任何textareas。这些错误仅出现在日志中。在对init的调用周围进行尝试/捕获不会报告问题。我被迫在每次对tinyMCE的调用中都进行尝试/捕获,因为未能初始化textareas意味着我不得不恢复到从textarea的value属性中获取元素的值:
TypeError: r is not a constructor[Learn More] tiny_mce.js:1:118759
init
https://localhost/tinymce/jscripts/tiny_mce/tiny_mce.js:1:118759
r/<
https://localhost/tinymce/jscripts/tiny_mce/tiny_mce.js:1:118589
loadQueue/<
https://localhost/tinymce/jscripts/tiny_mce/tiny_mce.js:1:84151
allDone
https://localhost/tinymce/jscripts/tiny_mce/tiny_mce.js:1:84641
loadScripts
https://localhost/tinymce/jscripts/tiny_mce/tiny_mce.js:1:85295
loadQueue
https://localhost/tinymce/jscripts/tiny_mce/tiny_mce.js:1:84094
r
https://localhost/tinymce/jscripts/tiny_mce/tiny_mce.js:1:118551
render
https://localhost/tinymce/jscripts/tiny_mce/tiny_mce.js:1:118601
init/</<
https://localhost/tinymce/jscripts/tiny_mce/tiny_mce.js:1:111552
each
https://localhost/tinymce/jscripts/tiny_mce/tiny_mce.js:1:1547
init/<
https://localhost/tinymce/jscripts/tiny_mce/tiny_mce.js:1:111297
g
https://localhost/tinymce/jscripts/tiny_mce/tiny_mce.js:1:53537
_pageInit/<
https://localhost/tinymce/jscripts/tiny_mce/tiny_mce.js:1:55059
each
https://localhost/tinymce/jscripts/tiny_mce/tiny_mce.js:1:1547
_pageInit
https://localhost/tinymce/jscripts/tiny_mce/tiny_mce.js:1:55037
_wait/<
https://localhost/tinymce/jscripts/tiny_mce/tiny_mce.js:1:55590
TypeError: q.getWin(...) is undefined[Learn More] tiny_mce.js:1:127070
我很困惑,因为我没有更改任何调用tinyMCE的Java语言。但是我知道问题一定出在我的代码中,因为我在Firefox和Chrome上都遇到相同的乱码错误。例如,未修改的init调用是:
tinyMCE.init({
mode : "textareas",
theme : "advanced",
plugins : "spellchecker,advhr,preview",
// Theme options - button# indicates the row# only
theme_advanced_buttons1 : "newdocument,|,bold,italic,underline,|,justifyleft,justifycenter,justifyright,fontselect,fontsizeselect,formatselect",
theme_advanced_buttons2 : "cut,copy,paste,|,bullist,numlist,|,outdent,indent,|,undo,redo,|,link,unlink,anchor,image,|,forecolor,backcolor",
theme_advanced_buttons3 : "",
theme_advanced_toolbar_location : "top",
theme_advanced_toolbar_align : "left",
theme_advanced_statusbar_location : "bottom",
theme_advanced_resizing : true,
forced_root_block : false,
forced_root_block : false,
content_css : "/styles.css",
onchange_callback : "changeOccupation",
editor_deselector : "mceNoEditor"
});
我什至没有更改与tinyMCE相关的一行代码。除了Google地图外,我没有使用其他任何导入的代码,由于Google严格了许可条件,我上个月更改了该代码。在Firefox和Chrome出现问题之前,我对实现进行的最后更改是对我的个人库之一的更改,该库显示与输入地名相关的对话框。该库是https://www.jamescobban.net/jscripts/locationCommon.js。这些对话框的布局由https://www.jamescobban.net/templates/LocationDialogsen.html中的HTML模板控制。为了简化将此功能添加到我网站上的PHP脚本中的过程,我更改了locationCommon.js,以便它通过document.body.innerHTML + = text将模板文件的内容附加到页面的正文中;您可以在locationCommon.js顶部附近看到执行此操作的代码。这样避免了将手动的通用模板信息手动添加到每个脚本中的情况,这些脚本调用locationCommon.js中的函数,并且还为对话框添加了I18N支持。
我只是不明白为什么我对实现进行的任何完全不相关的更改都会突然导致tinyMCE失败。
不幸的是,我的网站上所有显示该问题的脚本都要求该用户以注册用户身份登录,并且特别被授予更新请求记录的权限。例如https://www.jamescobban.net/FamilyTree/editEvent.php?idir=117083&rownum=&ider=0&type=30&idet=47。而且那些允许临时访问者使用tinyMCE输入数据的脚本也没有证明问题。例如:https://www.jamescobban.net/BlogPost.php?table=Blogs&blogid=297
我尝试修改一个失败的脚本,以使用最新版本的tinyMCE(4.2.7),但失败了,这恰恰说明了我坚持使用旧版本的原因,
Loading failed for the <script> with source “https://localhost/jscripts /tiny_mce/js/tinymce/themes/advanced/theme.min.js”. editEvent.php:1:1
Loading failed for the <script> with source “https://localhost/jscripts/tiny_mce/js/tinymce/plugins/advhr/plugin.min.js”. editEvent.php:1:1
Failed to load: https://localhost/jscripts/tiny_mce/js/tinymce/themes/advanced/theme.min.js tinymce.min.js:4:3508
Failed to load: https://localhost/jscripts/tiny_mce/js/tinymce/plugins/advhr/plugin.min.js tinymce.min.js:4:3508
TypeError: tinyMCE.get(...) is null[Learn More]
我退出了将模板添加到页面正文的代码,并确认这是导致tinyMCE失败的原因。剩下的问题是我仍然需要使这些模板可用于locationCommon.js脚本。我不想将模板作为文本加载,因为用于显示对话框的库例程都希望模板为HTML。我尝试将它们加载为XML,但这意味着我无法使用任何HTML DOM方法(尤其是document.getElementById)来定位模板。因此,我必须整理XML DOM以模拟HTML DOM方法。尤其是代码期望能够使用HtmlFormElement类的接口,包括属性id,名称,元素,并且表单中的每个输入元素都可以作为表单元素的属性在其名称值下使用。属性。因此,我现在遇到了一堆混乱的代码,其唯一目的是解决以下事实:如果有人在正文部分添加文本,tinyMCE就会咳嗽它的cookie!如果有人可以向我解释为什么我必须做所有这些额外的工作,我将不胜感激。