我花了一整天的时间来解决这个问题,我发布这个以供将来参考。
我正在建立一个利用tinyMCE编辑器v 3.X的新闻发布网站(由www.phpenter.net提供支持),我对tinyMCE v4.0.26进行了升级,更新了一些init参数,一切都很好。我使用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正确加载所有内容。
答案 0 :(得分:1)
经过一些调试后,我在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
如果失败,脚本会尝试查找Opera中存在的document.currentScript
参数,而不是IE10和Chrome中的参数。
因此,为了解决这个问题,我们可以将tiny_mce.js重命名为tinymce.js并编辑所有应用程序引用(原始phpenter.net实现使用tiny_mce
),或编辑正则表达式以查找{ {1}}代替tiny_mce
。
另外,我们可以在IE和Chrome中添加tinymce
等效DOM属性的检查。
答案 1 :(得分:0)
这仍然是tinyMCE 4.3.11的问题。适当的解决方法是preInit tinyMCE。在包含tinymce.min.js
文件之前插入以下内容。将base
路径更改为JS目录所在的路径。
<script type="text/javascript">
window.tinymce = { suffix: "", base: "/absolute/path/to/js" }
</script>
例如,在Symfony2中,我在Twig模板中执行以下操作:
<script type="text/javascript">
window.tinymce = { suffix: "", base: "{{ app.request.baseUrl }}/js" }
</script>
注意:较早版本的TinyMCE可能必须使用window.tinyMCEPreInit
而不是window.tinymce