tinyMCE在IE10和Chrome中未发现正确的插件路径
我花了整整一天的时间来解决这个问题,我把这个贴出来以备将来参考 我正在建立一个新闻发布网站(由www.phpenter.net提供支持),该网站利用tinyMCE editor v3.X,我升级到tinyMCE v4.0.26,更新了一些初始参数,一切都很好。我使用Opera进行开发,因此没有立即发现问题 当我在IE10和Chrome中测试站点时,编辑器无法加载,我得到了一个错误:tinyMCE在IE10和Chrome中未发现正确的插件路径,tinymce,Tinymce,我花了整整一天的时间来解决这个问题,我把这个贴出来以备将来参考 我正在建立一个新闻发布网站(由www.phpenter.net提供支持),该网站利用tinyMCE editor v3.X,我升级到tinyMCE v4.0.26,更新了一些初始参数,一切都很好。我使用Opera进行开发,因此没有立即发现问题 当我在IE10和Chrome中测试站点时,编辑器无法加载,我得到了一个错误: Object doesn't support this action Line 27037 self.th
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 }
29191//获取tinymce脚本所在的基
29192 var scripts=document.getElementsByTagName('script');
29193 for(var i=0;i
第29200行有一个tinymce的正则表达式匹配项,但是在我的实现中这会失败,因为脚本已从tinymce.js重命名为tiny_mce.js
失败时,脚本尝试查找Opera中存在但IE10和Chrome中不存在的document.currentScript
参数
因此,为了解决这个问题,我们可以将tiny_mce.js重新命名为tinymce.js并编辑对它的所有应用程序引用(最初的phpenter.net实现使用的是tiny_mce
),或者编辑正则表达式以查找tiny_mce
此外,我们还可以在IE和Chrome中添加对
document.currentScript
等效DOM属性的检查。从tinyMCE 4.3.11开始,这仍然是一个问题。正确的解决方法是预先初始化tinyMCE。在包含tinymce.min.js
文件之前插入以下内容。将base
路径更改为JS目录所在的位置
<script type="text/javascript">
window.tinymce = { suffix: "", base: "/absolute/path/to/js" }
</script>
window.tinymce={suffix:,base:“/absolute/path/to/js”}
例如,在Symfony2中,我在我的小树枝模板中执行以下操作:
<script type="text/javascript">
window.tinymce = { suffix: "", base: "{{ app.request.baseUrl }}/js" }
</script>
window.tinymce={suffix:,base:{{app.request.baseUrl}}/js}
注意:旧版本的TinyMCE可能必须使用window.tinyMCEPreInit
而不是window.TinyMCE