tinyMCE没有在IE10和Chrome中发现正确的插件路径

时间:2014-05-19 08:15:54

标签: tinymce

我花了一整天的时间来解决这个问题,我发布这个以供将来参考。

我正在建立一个利用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正确加载所有内容。

2 个答案:

答案 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