TinyMCE是一个很优秀的可视化编辑器,在最近项目使用中,由于跨域使用产生了一些问题。
项目中,TinyMCE位于http://img.xxx.com/editor/tinymce中,而我的应用在http://life.xxx.com,life.xxx.com调用tinymce时用:
<script type=text/javascript src=http://img.xxx.com/editor/tinymce/tiny_mce.js></script>
这样当你点击tinymce的插入图片等有弹出窗口的功能按钮时,系统会报在tiny_mce_popup.js中产生“Permission Denied”的错误,根据官方文档的解析,在最新的3.2.2.1版中建议在tiny_mce_popup.js的最前面增加document.domain=”xxx.com”一句,由于tiny_mce_popup.js是由tinymce在运行中自行引入的,无法由我们的程序在运行中自动设定,因此如果在tiny_mce_popup.js中写上这句话会让系统变成硬编码,当我们每次域名变更时都要来更改这个文件。而我们想法是最好是这句话可以由系统自动产生,不需要人为加上这一句,为此必须在tiny_mce_popup.js加一几行hack代码:
current_url = location.href; s = current_url.match(/(.*)\?(.*)?$/); if(s){ query_params = s[2].split('&'); for(i=0;i<query_params.length;i++){ if(query_params[i].indexOf('mce_rdomain=')!=-1){ current_domain = query_params[i].replace('mce_rdomain=',''); if(current_domain!=''){ document.domain = current_domain; } break; } } }
除了要修改tiny_mce_popup.js的代码外,在调用tinymce之前还要加上document.domain=”xxx.com”;
<script>
document.domain=”xxx.com”;
//document.domain=”<?php echo $domain?>”;
</script>
<script type=text/javascript src=http://img.xxx.com/editor/tinymce/tiny_mce.js></script>
这样tinymce在运行中会自动以mcr_rdomain的传参形式向各个插件传递你设定的domain信息,而在调用tinymce的这个文件是可以由我们的程序控制的,document.domain的值可以由程序生成。
还有一种另为简单的解决方案:
在你的apache中做一下配置
RewriteRule ^/editor/tinymce/(.*) http://img.xxx.com/editor/tinymce/$1 [p]
调用tinymce时用:
<script type=text/javascript src=/editor/tinymce/tiny_mce.js></script>
2015 © DONY. ALL Rights Reserved. 闽ICP备09025082号-1
相关评论
我要评论