Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Javascript中使用document.domain的同源策略解决方案_Javascript_Same Origin Policy - Fatal编程技术网

在Javascript中使用document.domain的同源策略解决方案

在Javascript中使用document.domain的同源策略解决方案,javascript,same-origin-policy,Javascript,Same Origin Policy,我在Javascript中遇到了同源策略问题。我已经阅读了有关使用document.domain变量解决此问题的方法,但我无法使该方法起作用。解决方法是,您应该能够将document.domain设置为'example.com',这样,如果您从foo.example.com运行代码,它就可以通过XHR从bar.example.com加载数据 解决方法的详细信息如下: 我的示例代码(不会产生期望的结果)是从类似http://foo.example.com/: <!DOCTYPE html

我在Javascript中遇到了同源策略问题。我已经阅读了有关使用
document.domain
变量解决此问题的方法,但我无法使该方法起作用。解决方法是,您应该能够将
document.domain
设置为
'example.com'
,这样,如果您从
foo.example.com
运行代码,它就可以通过XHR从
bar.example.com
加载数据

解决方法的详细信息如下:

我的示例代码(不会产生期望的结果)是从类似
http://foo.example.com/

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<script>
document.domain = 'example.com';
window.onload = function() {
    var req = new XMLHttpRequest();
    var url = 'http://bar.example.com/';
    req.open('GET', url, true);
    req.onreadystatechange = function (aEvt) {
        if (req.readyState == 4) {
            var elem = document.getElementById('result');
            if (req.status == 200) {
                var data = req.responseText;
            } else {
                var data = "Error loading page: " + req.status;
            }
            elem.innerHTML = data;
        }
    };
    req.send(null);
};
</script>
Result:<hr>
<div id="result"></div>
</body>
</html>

document.domain='example.com';
window.onload=函数(){
var req=新的XMLHttpRequest();
var url='1〕http://bar.example.com/';
请求打开('GET',url,true);
req.onreadystatechange=功能(aEvt){
如果(req.readyState==4){
var elem=document.getElementById('result');
如果(请求状态==200){
var数据=请求响应文本;
}否则{
var data=“错误加载页面:”+req.status;
}
elem.innerHTML=数据;
}
};
请求发送(空);
};
结果:
此代码的输出:

Result: Error loading page: 0 结果: 加载页面时出错:0 如果我将
url
更改为
'http://foo.example.com/“
,一切正常。我的示例代码中有bug吗


我不想使用代理,因为它们速度较慢,效率较低,并且会增加web服务器上的流量。如果这个变通方法真的奏效,那就太酷了。这是一种“空中馅饼”的解决方案吗?

document.domain
允许帧/帧之间的通信。不是XHR

<body>
<iframe src="http://bar.example.com/"></iframe>
<script>
    document.domain = 'example.com';
    var ifr = document.getElementsByTagName('IFRAME')[0];
    ifr.onload = function(e){
        //will log the string "BODY" in the console
        console.log(ifr.contentWindow.document.body.tagName);
    };
</script>
</body>

document.domain='example.com';
var ifr=document.getElementsByTagName('IFRAME')[0];
ifr.onload=函数(e){
//将在控制台中记录字符串“BODY”
console.log(ifr.contentWindow.document.body.tagName);
};

如果删除带有
document.domain
的行,读取contentWindow的内容将抛出同源策略错误。

我尝试过。在chrome中设置document.domain返回网络错误。开发人员工具遇到了同源策略问题。您是否尝试在父域和子域中将
document.domain
设置为相同的值?如果不是,这会导致错误。我想这是因为iframe是一个完全不同的域。是的,域必须是相同的。这对于子域/端口问题非常有用。如果foo.example.com设置了document.domain=example.com,如果bar.foo.example.com设置了document.domain=example.com,它是否也能够进行通信?