我花了整整一天的时间来解决这个问题,我将其发布以供将来参考。
我正在建立一个新闻发布网站(由www.phpenter.net提供支持),该网站使用tinyMCE编辑器v 3.X,我进行了对tinyMCE v4.0.26的升级,更新了一些初始化参数,一切都很好。我使用Opera进行开发,所以没有立即发现问题。
当我在IE10和Chrome中测试网站时,无法加载编辑器,但出现错误:
Object doesn't support this action
Line 27037 self.theme = new Theme(self, ThemeManager.urls[settings.theme]);
我还看到所有的tinyMCE资源(JS,CSS)都没有加载:
HTTP/1.1 404 Not Found
路径错误:
http://mysite//plugins/visualblocks/plugin.min.js
代替
http://mysite/scripts/tiny_mce/plugins/visualblocks/plugin.min.js
所有资源都是这种情况
这仅发生在Chrome和IE中,Opera正确加载了所有内容。
经过一些调试后,我在tinymce.js中找到了相关代码:
29191 // Get base where the tinymce script is located
29192 var scripts = document.getElementsByTagName('script');
29193 for (var i = 0; i < scripts.length; i++) {
29194 src = scripts[i].src;
29195
29196 // Script types supported:
29197 // tinymce.js tinymce.min.js tinymce.dev.js
29198 // tinymce.jquery.js tinymce.jquery.min.js tinymce.jquery.dev.js
29199 // tinymce.full.js tinymce.full.min.js tinymce.full.dev.js
29200 if (/tinymce(\.full|\.jquery|)(\.min|\.dev|)\.js/.test(src)) {
29201 if (src.indexOf('.min') != -1) {
29202 suffix = '.min';
29203 }
29204
29205 baseURL = src.substring(0, src.lastIndexOf('/'));
29206 break;
29207 }
29208 }
29209
29210 // We didn't find any baseURL by looking at the script elements
29211 // Try to use the document.currentScript as a fallback
29212 if (!baseURL && document.currentScript) {
29213 src = document.currentScript.src;
29214
29215 if (src.indexOf('.min') != -1) {
29216 suffix = '.min';
29217 }
29218
29219 baseURL = src.substring(0, src.lastIndexOf('/'));
29220 }
在29200行上,tinymce有一个正则表达式匹配项,但是这在我的实现中会失败,因为脚本已从tinymce.js重命名为tiny_mce.js。
如果失败,脚本将尝试查找document.currentScript
Opera中的参数,而不是IE10和Chrome中的参数。
因此,要解决此问题,我们可以将tiny_mce.js重命名为tinymce.js并编辑对其的所有应用程序引用(原始phpenter.net实现正在使用tiny_mce
),或者编辑正则表达式以查找tiny_mce
而不是tinymce
。
另外,我们可以document.currentScript
在IE和Chrome中添加对等效DOM属性的检查。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句