我在Javascript中遇到了同源策略問題。我已閱讀了關於使用document.domain
變量的解決方法,但我無法使解決方法發揮作用。解決方法是,您應該能夠將document.domain
設置爲'example.com'
,這樣如果您運行foo.example.com
的代碼,它可以通過bar.example.com
的XHR加載數據。在解決方法在Javascript中使用document.domain的同源策略解決方法
詳情請看這裏:
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/'
,則一切正常。我的示例代碼中是否有錯誤?
我不想使用代理服務器,因爲它們速度較慢,效率較低,並且會增加Web服務器上的流量。如果這個解決方法真的有效,它會非常酷。這個解決方法是「天空中的派」嗎?
感謝j0rd4n,這正是我尋找的那種非代理解決方案,即使我正在用document.domain咆哮錯誤的樹。我在他們稱之爲JSONP的方案以及jQuery如何內置此功能方面發現了更多信息,這超出了我的問題範圍,但仍然有趣: http://www.ibm.com/developerworks/library/wa-aj-jsonp1/ – Rubix 2010-03-09 07:35:05
我提到的過程使用JSONP,但是它在手動意義上使用。 jquery將處理JSONP到JavaScript DOM的「接收」,但你仍然需要提供一個返回JSONP文本的服務。在一天結束時,您的服務器頁面必須返回格式化的JSONP。您的JavaScript(無論是jquery,ext-js等)必須調用腳本標記內的腳本。 – 2010-03-09 22:31:25