tinyMCE在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

我花了整整一天的时间来解决这个问题,我把这个贴出来以备将来参考

我正在建立一个新闻发布网站(由www.phpenter.net提供支持),该网站利用tinyMCE editor v3.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                           }           
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