在网上查到是使用document.domain="domain.com"来解决,但实际上解决不了
情况是这样的:
a.domain.com上的test.html,通过ajax调用b.domain.com上的remote.aspx页面,remote.aspx返回一段json或者html
在test.html中使用document.domain="domain.com",但问题依然不能解决。
情况是这样的:
a.domain.com上的test.html,通过ajax调用b.domain.com上的remote.aspx页面,remote.aspx返回一段json或者html
在test.html中使用document.domain="domain.com",但问题依然不能解决。
iframe解决方案稳定么?
解决的办法是:
主域名和子域名同样指向ajax请求的地址。然后请求的地址动态获取host。 或者域名重写var url = 'http://' + document.location.host + '/servers/getjosn.ashx?asdasda=asdasd';
ajax->ashx WebClient 获取 - >返回json数据
local:www.domainabc.com -request-> remote:www.domainxyz.com(可部署)
local:abc.ciroyong.com -request-> remote:xyz.ciroyong.com(不可部署)或 remote:www.domainxyz.com(不可部署) 方法一:设定domain属性
只适合情形1。Document对象的domain属性一定程度上缓解了多个二级域名时带来的不便,只要local和remote的domain属性都设为同一个域(ciroyong.com)就可以互相访问了。不过只是一定程度上的,只能接受两个域共有的部分(如abc.ciroyong.com不能设成xyz.ciroyong.com反过来也不可,只能为ciroyong.com),还要保持至少有一个“点号”。方法二:通过iframe与hash来传递
1和2都适用。可以将要请求的remote页面包含在local页面的iframe中,由于iframe与父框架可以互相设定hash 值,这样就可以在2个页面中都设定监听方法(setInterval??)来捕获hash值的变化,不过remote端捕获的是请求命令而local端捕获的是请求结果。方法三:js脚本植入
1和2都适用,在local端的页面中插入一个在remote端部署的动态脚本生成程序,然后通过将请求命令编码成url作为包含脚本的src,响应端的程序处理url查询命令返回特定的javascript代码(包含操作或者数据),代码在插入时被浏览器解析并执行。这也是baidu在用的方法。方法四:没有办法的办法也是最正当的方法proxy
适合全部三种情形也是解决情形3的唯一办法。就是用可以跨域的服务器语言编写一个代理proxy,放在local端。请求时ajax请求本地的proxy来读取远端的数据再返回给请求端。不破坏同源策略而且实现起来容易,我比较爱用。唯一局限是要受服务器性能限制。方法2就是 iframe 可以解决一定的问题,但是不可取。