我正在尝试制作一组文件,以便能够发送给某人,并且他们可以在本地网络浏览器中查看一些内容。当使用网络服务器(apache)查看时,我的代码可以工作,但如果我将其作为文件加载(即 file:///C:/Code/Web/test/index.html),则会出现跨域请求错误加载 JSON 文件时从我的 JavaScript 文件中获取。 HTML、JS 和 JSON 文件都位于同一文件夹中。我不确定这是如何跨域请求以及为什么 chrome 和 IE 无法加载 JSON 文件。 Firefox 加载它没有问题。
我用于加载文件的 JS 是:
const JSON_FILE = "tin.json";
var xmlhttp;
function webGLStart()
{
fetchDoc(JSON_FILE,loadJSON)
}
function fetchDoc(url,cfunc)
{
if (window.XMLHttpRequest)
{
xmlhttp=new XMLHttpRequest();
}
xmlhttp.onreadystatechange=cfunc;
xmlhttp.open("GET",url,false);
xmlhttp.send();
}
function loadJSON()
{
if(xmlhttp.readyState == 4 && xmlhttp.status == 200)
{
var input = JSON.parse(xmlhttp.responseText);
displayData(input);
}
}
我的 html 页面中什么也没发生。它只是一个 Canvas ,主体在加载时调用 webGLStart。
有办法解决这个问题吗?还是 chrome 和 IE 不允许这样做?
最佳答案
它可以保护您免受此类攻击:
- 您会收到一封电子邮件,其中包含 HTML 文档作为附件
- 双击附件并在默认浏览器中打开 HTML 文档
- 文档中嵌入的 JavaScript 会访问您硬盘上的文件并将其上传给攻击者
Chrome 和 IE 完全禁止文件方案 URI 的访问。 Firefox 允许它们 only if主机 URI 所在的目录是包含目标 URI 的目录的祖先。
<小时/>您已经确定了解决方法:在 Web 服务器上托管 Web 应用程序。
关于javascript - 为什么这是跨域请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29493538/