tinymce与子域 跨域

本文不会去讨论不同域之间的跨域,但是会谈到父子域等域处理上的问题,主要结合的是tinymce编辑器。

准备将系统中的一些静态部分分离出去,tinymce这个大块头首当其冲。
分离出去后自然要面临跨域问题。
初始化编辑器没有问题,但是部分编辑器插件将无法使用,这些插件都为pop模式。

父子域名,子域间
例如:我要将静态部分、主程序部分别分部署到  
http://static.a.com http://www.a.com
由于以pop模式弹出的窗口位于域static.a.com,主窗口位于:www.a.com.这样导致了权限上的问题。

解决方案子域之间的跨域问题,当然就是设置document.domain属性,本来准备自己来实现。
测试后发现tinymce在tiny_mce_popue.js 中已经实现了。通过查询参数mcd_rdomain来将主域传递到
弹出窗口。

IP地址,不同端口
子域之间的跨域问题得到解决,那么如果采用IP形式,不同的端口呢?针对这个tinymce无法
自动来实现跨域(实际这个已经不是跨域的问题了),这样我们可以手动设置域:
例如设置成:document.domain = "50.6.2" .(IP:192.50.6.2)
因为使用IP通常为内部开发过程。

注意点

一、

针对tinymce内置的实现,提出一点问题: 内置获取域的方式为:
// User already specified a document.domain value
if (document.domain && lo.hostname != document.domain)
    tinymce.relaxedDomain = document.domain;

// Setup document domain if tinymce is loaded from other domain
if (!tinymce.relaxedDomain && tinymce.EditorManager.baseURI.host != lo.hostname && lo.hostname)
    document.domain = tinymce.relaxedDomain = lo.hostname.replace(/.*\.(.+\..+)$/, '$1');

他是取域名的后面两个部分.
例如域名为 www.a.com.cn
取到的域为com.cn,这样他会设置当前的域为com.cn以及将所有弹出窗口的域也设置成com.cn
这样的设置显然处在一个极大的安全问题。
所以强烈建议如果需要设置document.domain请手动设置。


二、
对document.domain的设置是只能往高级设置而不能逆过来的 。
例如:static.a.com.cn
我可以设置成 a.com.cn.但是设置成a.com.cn后无法再设置成static.a.com.cn

 

posted @ 2009-01-21 10:09  5yplan  阅读(2264)  评论(0编辑  收藏  举报