2012-09-07 36 views
1

我想我有一个有趣的问题,经过几天的思考和研究,我一直无法想出一个解决方案。pushState()解除'记住密码'对话框

我正在编写一个受phpMyAdmin启发的web应用程序,因此它使用框架来控制内容放置。由于这个原因,任何访问过的网址都将是index.php ..除非我使用历史API的pushState()方法来更改网址以反映帧中正在访问的页面。

然而,问题来自这种方法;在登录后,用户将从login.html重定向到index.php,并且在一瞬间,chrome询问是否要我记住密码。随着访问触发pushState()方法,该小条消失。这种行为不是我希望应用程序继续提交的。我希望用户能够根据需要存储他们的密码(我还没有进入cookie,但我仍然对此很陌生)。

我试过考虑检查我可以放置在最后访问的页面周围,但是由于我对此类经验的原因,并没有摆脱出来。所以,更多关于此的眼睛将不胜感激任何想法如何解决这个问题。

如果有帮助的所有,我目前的触发这个代码是..

$(window).on('load', function(){ 
    window.parent.history.pushState(null, "index.php", "index.php"); 
}); 

到目前为止,这种行为只发生在Chrome。 Firefox和IE的行为如预期。

+0

标题说,'pushState的()'是刷新页面,但是从描述似乎并非如此。相反,问题是'pushState()'消除了记住密码对话框。你能澄清吗? –

+0

@SeanHogan我已经编辑过标题,并对其他浏览器稍作澄清。对困惑感到抱歉。 – Daedalus

+1

你需要初始'pushState()'吗? –

回答

0

避免初始pushState的

(function($) { 
    var firstLoad=true; 
    $(window).on('load', function(){ 
    if (firstLoad!==true) 
     window.parent.history.pushState(null, "index.php", "index.php"); 
    firstLoad=false; 
    }); 
})(jQuery); 
+0

事实证明,这不起作用的原因已经在上面描述,但稍加修改 - 放置在框架的父母,并通过'window.parent.variable'访问的变量 - 我能够得到脚本按照它应该的方式行事,所以我会接受这个作为解决问题的答案。 – Daedalus

0

试试这个

(function($) { 
    var isFirst = true; 


    $(window).on('load', function (evt){ 

     if(isFirst && wasLastPage('index.html')) return; 
     isFirst = false; 

     window.parent.history.pushState(null, "index.php", "index.php"); 

    }); 

    function wasLastPage(pageName){ 
     //document.referrer only works in non IE 
     var lastPage = (document.referrer)? document.referrer : ''; 

     return (lastPage.indexOf(pageName) === lastPage.length - pageName.length); 
    } 

}); 
+0

我刚刚编辑,我没有意识到它是可选的,你忽略第一推状态。每Deadalus commmet。 – LessQuesar

+0

我其实已经尝试过使用referrer,它不会工作,因为索引页将始终是引用者。 – Daedalus