XMLHttpRequest.send失败,带有相对路径

时间:2013-11-20 20:23:59

标签: javascript html xmlhttprequest

我很难找到可能有所补救的东西。我正在开发一个没有服务器的网站。这样做时,我在尝试通过XMLHttpRequest访问文件时遇到了问题。

正如您在示例代码段中看到的,我创建了变量,使用相应路径打开它,并使用send函数。

当我使用必须遍历父目录的相对路径时,send()函数失败。但是,如果我提供的路径与网页位于同一目录中,或者在当前网页目录的子文件夹中转发,我会看到XMLHttpRequest成功返回。在这些成功的案例中,我可以在request.responseText中看到测试文件的数据。

对此的任何帮助将不胜感激。

我现在唯一的领导是可能存在安全威胁,阻止“get”请求遍历父目录。

谢谢。

代码段:

function test(){
    var request = new XMLHttpRequest();
    request.open('GET', "../test.txt", true);
    request.send();//FAILS HERE

    //Get Response
    var response = request.responseText;
}

function test2(){
    var request = new XMLHttpRequest();
    request.open('GET', "test.txt", true);
    request.send();
    //Get Response
    var response = request.responseText; //SUCCESSFUL
}

2 个答案:

答案 0 :(得分:2)

来自the MDN website,关于Gecko引擎,因此关于Firefox浏览器:

  

只有当原始文件的父目录是目标文件的祖先目录时,文件才能读取另一个文件。

其他浏览器也存在类似的规则。这是file:///协议的限制。这是有充分理由的。试图打破它是没有意义的。解决方案是在您的计算机上运行本地服务器,这甚至有点困难。

澄清一下:让我们假设您有这样的文件结构:

- file1.html
- dir1/
  - file2.html
- dir2/
  - index.html
  - file3.html
  - dir3/
    - file4.html

index.html内,您可以使用Javascript访问file3.htmlfile4.html。它无法访问file1.htmlfile2.html

答案 1 :(得分:0)

使用file-> open直接在浏览器中打开文件,然后在地址栏中复制URL。