JavaScript의 document.domain을 사용한 동일한 원래 정책 해결 방법
-
18-09-2019 - |
문제
JavaScript에서 동일한 원래 정책 문제를 겪고 있습니다. 나는 이것을 사용하는 해결 방법에 대해 읽었습니다 document.domain
변수이지만 해결 방법을 작동시킬 수는 없습니다. 해결 방법은 당신이 설정할 수 있어야한다는 것입니다. document.domain
에게 'example.com'
따라서 코드를 실행하는 경우 foo.example.com
XHR을 통해 데이터를로드 할 수 있습니다 bar.example.com
.
해결 방법에 대한 자세한 내용은 다음과 같습니다.
https://developer.mozilla.org/en/same_origin_policy_for_javaScript
원하는 결과를 생성하지 않는 내 예제 코드는 URL에서 실행됩니다. 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>
이 코드의 출력 :
Result: Error loading page: 0
내가 변하면 url
에게 'http://foo.example.com/'
, 모든 것이 올바르게 작동합니다. 내 예제 코드에 버그가 있습니까?
프록시가 느리고 효율적이지 않으며 웹 서버의 트래픽을 증가시키기 때문에 프록시를 사용하고 싶지 않습니다. 이 해결 방법이 실제로 작동하면 정말 멋질 것입니다. 이 해결 방법은 "하늘에 파이"입니까?
해결책
마이크가 왜 작동하지 않는지 대답했기 때문에, 나는 도메인 크로스 온도를 만드는 방법에 대한 해결책을 공유 할 것이라고 생각했습니다. 내 SO 게시물을 참조하십시오 여기.
다른 팁
document.domain
프레임/iframes 간의 통신을 허용합니다. 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
, ContentWindow의 내용을 읽으면 동일한 원산지 정책 오류가 발생합니다.