Chrome和--allow-file-access-from-files

时间:2011-12-19 04:28:00

标签: php jquery ajax json google-chrome

我有一个jquery / AJAX登录页面,可以在Chrome以外的所有浏览器中使用。我似乎已经碰到了Problems with jQuery getJSON using local files in Chrome中涉及的Chrome问题 - 有人说这是一个错误,其他人说这是一个很好的安全性。我说这很令人沮丧。

我应该补充说,登录实际上是有效的,这是AJAXiness打破了。解决方案是将 - allow-file-access-from-files 添加到启动环境中。很好,但是如何解决使用Chrome的网站访问者的问题?

作为Chrome用户,必须编写代码来检查Chrome用户并说“使用其他内容”,这具有讽刺意味。

有没有人知道如何围绕这个问题进行编码?

对于它的价值,这里是代码:

$(document).ready(function()
{
    $("#login_form").submit(function()
    {
        //remove all the class add the messagebox classes and start fading
        $("#msgbox").removeClass().addClass('messagebox').text('Checking...').fadeIn(1000);
        //check the username exists or not from ajax
        $.post("/ajaxsignin.php",{email:$('#email').val(), password:$('#password').val(), remember:$('#remember').val(), rand:Math.random()} ,function(data)
        {
          if(data.success) //if correct login detail
          { 
/////////////////////////////////////////////////////////////////////
//  if I put an alert() here, Chrome just doesn't see it but all other browsers do
//////////////////////////////////////////////////////////////////////

                document.getElementById("msgbox").innerHTML='Sign in successful';

                document.getElementById("topmenutext").style.paddingTop='3px';

                document.getElementById("topmenutext").innerHTML="BUG REPORT    |sign out|contact|help";

                var sPath = window.location.pathname;
                var sPage = sPath.substring(sPath.lastIndexOf('/') + 1);

                if(sPage == "register.php" || sPage == "index.php" || sPage == ""){
                    window.location.href='menu.php';
                }
                else{
                    disablePopup();
                }

          }
          else //if login failed
          {
              $("#msgbox").fadeTo(200,0.1,function() //start fading the messagebox
            { 
              //add message and change the class of the box and start fading
              $(this).html('Login failed - perhaps you need to register for an account').addClass('messageboxerror').fadeTo(900,1);
            });     
          }

        },"json");
        return false; //not to post the  form physically
    });
    //now call the ajax also focus move from 
    $("#submitbtn").click(function()
    {
        $("#login_form").trigger('submit');
    });
});

2 个答案:

答案 0 :(得分:1)

如果您尝试使用Chrome从本地文件系统加载文件,这应该只是一个问题。这是因为Chrome在文件系统上有严格的限制性AJAX策略。

基本上,Chrome不允许对html页面文件夹之外的文件进行AJAX请求。要解决此问题,只需从Web服务器提供文件即可。您的网站访问者可能会通过网络服务器访问您的网站,所以这对他们来说应该不是问题。

答案 1 :(得分:1)

请勿使用该标志。 You're opening your machine or your users machines to attacks。而是运行本地服务器。它就像打开shell /终端/命令行并输入

一样简单
cd path/to/files
python -m SimpleHTTPServer

然后将浏览器指向

http://localhost:8000

如果发现它太慢consider this solution