[英]XMLHttpRequest to get HTTP response from remote host
為什么以下代碼基於Mozilla示例不起作用? 嘗試使用Firefox 3.5.7和Chrome。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
</head>
<body>
</body>
<script>
var req = new XMLHttpRequest();
req.open('GET', 'http://www.mozilla.org/', false);
req.send();
if(req.status == 200) {
alert(req.responseText);
}
</script>
</html>
請瀏覽器從本地磁盤中提取html(文件:/// C:/Users/Maxim%20Veksler/Desktop/XMLHTTP.html)
在Firefox上它會出現以下錯誤:
uncaught exception: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIXMLHttpRequest.send]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: file:///C:/Users/Maxim%20Veksler/Desktop/XMLHTTP.html :: <TOP_LEVEL> :: line 10" data: no]
我究竟做錯了什么? 我想向遠程主機提交請求並提醒結果(稍后將其添加到div中)。
您的瀏覽器阻止了跨站點腳本 。 您必須使用相對路徑,否則大多數瀏覽器將只返回錯誤或空的responseText。
以下Stack Overflow帖子可能也與您的問題有關:
我還假設你已經在瀏覽器中直接打開了你的HTML測試頁面,你可以參考file:///...
對於XMLHttpRequest
調用,您需要從服務器提供HTML。 嘗試使用xampp( http://www.apachefriends.org/en/xampp.html )來啟動並運行本地服務器,然后從http://localhost/XMLHTTP.html
運行測試。
注意,這不能解決您的同源問題,但這將允許以下代碼工作:
<script>
var req = new XMLHttpRequest();
req.open('GET', '/myTestResponse.html', false);
req.send();
if(req.status == 200) {
alert(req.responseText);
}
</script>
安全問題沒有?
據推測,firefox阻止本地文件與遠程主機通話?
在網上偵察 - 發現了這一點。 嘗試將此添加到腳本的開頭:
try {
netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
} catch (e) {
alert("Permission UniversalBrowserRead denied.");
}
不能保證這個工作; 因為你最終要做的就是進入一個安全漏洞,瀏覽器已被專門編碼為已插入(跨域請求)。
但是,有一些特殊的場景可以打開,通常由用戶自行決定。
即使使用本地文件,也無法跨域發出請求。
https://developer.mozilla.org/en/Same_origin_policy_for_JavaScript
除非您正在開發一個擴展,它沒有與網頁相同的限制。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.