为什么jQuery.get('/ home / user / 0 / 0a.html')在使用file时失败:而不是http:?

时间:2010-07-05 20:11:24

标签: jquery

在前两段中,单击会生成一个警告框,其中包含指定文件的内容。在后两个没有警报框。

<html><head>
<script type="text/javascript" src="../../../../resources/jquery_1-4-2.js"></script>
</head><body>
<p onclick="$.get('/home/user/0/1/2/3/4/4a.html','',function(a){alert(a);});">
Get /home/user/0/1/2/3/4/4a.html</p>
<p onclick="$.get('/home/user/0/1/2/3/4/resources/4ra.html','',function(a){alert(a);});">
Get /home/user/0/1/2/3/4/resources/4ra.html</p>
<p onclick="$.get('/home/user/0/0a.html','',function(a){alert(a);});">
Get /home/user/0/0a.html</p>
<p onclick="$.get('/home/user/0/1/2/3/resources/3ra.html','',function(a){alert(a);});">
Get /home/user/0/1/2/3/resources/3ra.html</p>
</body></html>

系统和浏览器:

Linux Road 2.6.32-23-generic-pae #37-Ubuntu SMP Fri Jun 11 09:26:55 UTC 2010 i686 GNU/Linux
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.6) Gecko/20100628 Ubuntu/10.04 (lucid) Firefox/3.6.6

文件位于本地文件系统上。使用的网址是:

file:///home/user/0/1/2/3/4/test.html

通过直接从显示的页面(/home/user/0/1/2/3/4/4a.html/home/user/0/1/2/3/4/resources/4ra.html,{{1}复制网址,将网址输入到网络浏览器地址栏时,四个文件中每个文件的内容都会按预期显示},/home/user/0/0a.html)。

但是,使用{<3}}访问该文件,使用:

/home/user/0/1/2/3/resources/3ra.html

然后所有四个都按预期工作。

3 个答案:

答案 0 :(得分:2)

我可能错了,但我感觉它失败了,因为$.get()在处理请求时跟在Same origin policy之后,因为/ home / user /是什么不是有效链接而是文件路径,它失败了。

我建议您花2分钟时间运行快速测试服务器,然后在本地域中使用真实网址进行尝试。

如果安装了Python,就像在终端中输入一样简单:

python -m SimpleHTTPServer

答案 1 :(得分:1)

security.fileuri.strict_origin_policy阻止访问。要更正在地址栏中输入about:config,请将true的值更改为false security.fileuri.strict_origin_policy,这将使用方案{{1}授予对所有文件的访问权限除file:之外。

很长一段时间,这个信息的出发点来自Bartek使用的术语Same origin policyhis answer中的维基百科链接。

来自Browser Security Handbook, part 2 - Google代码托管项目:

  

Firefox 3是目前唯一的   使用基于目录的浏览器   同源访问的范围方案   在file://中。这带来一些风险   破坏古怪的本地应用程序,   并且可能不提供保护   共享下载目录,但是是   否则就是明智的做法。

来自Mozilla开发人员中心Same-origin policy for file: URIs

  

从Gecko 1.9开始,文件是   只允许读一些其他的   文件。具体来说,文件可以读取   另一个文件只有父母   原始文件的目录是   目标的祖先目录   文件。

但是,

  

新的   security.fileuri.strict_origin_policy   preference,默认为true,   如果用户可以设置为false   不想严格执行   文件中的原始政策:URIs。

所以,后两个文件遇到了这个限制,可以通过更改http:来解决。

请注意,在层次结构的其他部分中启用访问权限不会授予比文件系统允许的更多访问权限。

答案 2 :(得分:0)

我首先关闭您的<p>代码,然后了解它是如何运作的。

此外,您确实应该使用$().bind('click', function(){})$().click(function(){})而不是onclick绑定事件。

您使用的是Firebug,还是在查看错误控制台?

点击第一个后出现mismatched tag. Expected: </p>.错误。但是,它们都适合我。

确保文件存在且路径正确。

这是一个包含更多类似jQuery的版本:

<html>
  <head>
    <script type="text/javascript" src="file:////var/duck/js/jquery-1.4.2.js"></script>

    <script>
      $(document).ready(function(){
        $('#p_1').click(function(){
          $.get('/home/user/whatever.html','',function(a{alert(a);});
        });
      });
    </script>
  </head>
    <body>
      <p id='p_1'>
        Get /home/user/0/1/2/3/4/4a.html
      </p>
      <p id='p_2'>
        Get /home/user/0/1/2/3/4/resources/4ra.html
      </p>
      <p id='p_3'>
        Get /home/user/0/0a.html
      </p>
      <p id='p_4'>
        Get /home/user/0/1/2/3/resources/3ra.html
      </p>
    </body>
  </html>

填写每个<p>的绑定。有很多方法可以将元素链接到首选文件,实际上是 - 委托,数组,索引等。