我在 OS X 10.11.4 上运行 Chrome 版本 49.0.2623.108(64 位)。
从终端:
我跑了:
> ls /tmp
wtf.jpg
> ps -ef | grep -i chrome | grep -v grep
<empty line>
退出 Chrome 后,只需确保没有实例仍在运行。
然后我使用以下参数打开 Chrome 以跳过跨源检查:
> open /Applications/Google\ Chrome.app/ --args --allow-file-access-from-files"
我也试过:
> open /Applications/Google\ Chrome.app/ --args --disable-web-security"
现在,我运行简单的 go 服务器:
package main
import "net/http"
func main() {
panic(http.ListenAndServe(":8080", http.FileServer(http.Dir("/tmp"))))
}
最后,我将 Chrome 指向/tmp 中包含此脚本的本地 html5 页面:
var req = new XMLHttpRequest();
req.open('GET', "localhost:8080/wtf.jpg");
req.onload = function() {
console.log("succeeded");
};
req.onerror = function() {
Error("Network Error");
};
req.send();
结束这个错误:
XMLHttpRequest cannot load localhost:8080/wtf.jpg. Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource.
有办法解决这个烦恼吗?
最佳答案
我通过改变两件事解决了这个问题:
1) 我将 XMLHttpRequest.open 中不合格的 "localhost:8080/wtf.jpg"
更改为 "http://localhost:8080/wtf.jpg"
。这解决了 Chrome 错误消息。
2) 我更新了我的简单 go 服务器:
package main
import "net/http"
const PORT = ":8080"
func handler(w http.ResponseWriter, r *http.Request) {
if r.Method == "OPTIONS" {
w.Header().Set("Access-Control-Allow-Origin", "http://localhost"+PORT)
} else {
http.ServeFile(w, r, "wtf.html")
}
}
func main() {
panic(http.ListenAndServe(PORT, http.HandlerFunc(handler)))
}
这对于生产来说并不安全,但对于本地测试来说已经足够好了。
关于javascript - XMLHttpRequest 无法加载 localhost 资源,安全检查是 Chrome,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36214183/