客户端位于域foo.com
上,需要上传(发送POST XMLHttpRequest)到upload.foo.com
。
由于原产地政策相同,因此受到限制
但是,我设法提出的工作是,在iframe
打开foo.com
上动态创建upload.foo.com
并附加执行来自upload.foo.com
的POST请求的JavaScript代码像这样:
iframe.onLoad
[..]
(a=(b=doc)
.createElement('script'))
.src='http://foo.com/upload.php?'+Math.random(),
b.body.appendChild(a);
void(0);
现在,对我而言,这似乎是多余的:如果后者可能,我的逻辑告诉我,前者也应该是可能的。是吗?
- 更新
我刚刚注意到子域中有文件包含:
<?xml version="1.0" ?>
<cross-domain-policy>
<allow-access-from domain="*" />
<allow-access-from domain="*.foo.com" secure="false" />
</cross-domain-policy>
我可以以某种方式使用它吗?
答案 0 :(得分:1)
XMLHttpRequest对document.domain不敏感,因为出于安全原因,该对象需要相互选择,并且XHR无法知道目标可能希望将document.domain值设置为什么。为了使SiteA与SiteB上的站点的DOM进行交互,两个站点必须共享一个公共的私有域后缀,并且两者都必须通过将document.domain设置为它们的公共后缀来选择加入通信。
您的跨域策略文件实际上没有多大意义(因为它选择了所有内容,然后是所有内容的子集),但它用于Flash,而不是XHR(使用CORS)。
答案 1 :(得分:0)
我认为不可能简化这一点,但如果它看起来不那么优雅,那么有更简单的方法来使用跨源JS。
实际上,如果您尝试使用jsonp发送请求,这几乎就是jQuery所做的。 Wikipedia for JSONP
(以及绕过同源限制的其他几种方法)
我不知道这是不是你要问的问题,但是以可维护性的名义,我建议你使用jQuery approach。
您需要设置 dataType:'jsonp',并且您已完成设置。 您可以选择设置参数“callback =?”(查看文档)。