tinymce3.2.2.1跨域使用解决方案

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>


相关评论

暂无评论

我要评论