Questions tagged «browser-history»

13
如何通过history.pushState获得有关历史更改的通知?
因此,既然HTML5引入history.pushState了更改浏览器历史记录的方法,那么网站开始将其与Ajax结合使用,而不是更改URL的片段标识符。 可悲的是,这意味着这些呼叫无法再由来检测onhashchange。 我的问题是:是否有可靠的方法(黑客?;))来检测网站何时使用history.pushState?该规范未声明有关引发的事件的任何信息(至少我找不到任何东西)。 我试图创建一个Facade,并window.history用我自己的JavaScript对象替换了它,但是它根本没有任何效果。 进一步的说明:我正在开发一个Firefox插件,需要检测这些更改并采取相应措施。 我知道几天前有一个类似的问题,询问是否可以有效地侦听某些DOM事件,但我宁愿不依赖于此,因为可以出于许多不同的原因来生成这些事件。 更新: 这是一个jsfiddle(使用Firefox 4或Chrome 8),显示onpopstate在pushState调用时不会触发(或者我做错了吗?随时进行改进!)。 更新2: 另一个(侧面)问题是window.location使用时未更新pushState(但我认为我已经在此处阅读过此信息)。

5
退出后防止用户看到以前访问过的安全页面
我要求最终用户在注销/退出后不能返回受限页面。但是目前,最终用户可以通过浏览器后退按钮,访问浏览器历史记录甚至通过在浏览器地址栏中重新输入URL来做到这一点。 基本上,我希望最终用户退出后不能以任何方式访问受限页面。我怎样才能做到最好?我可以使用JavaScript禁用后退按钮吗?

4
您可以在不影响历史记录的情况下使用哈希导航吗?
恐怕这是不可能的,但是有没有一种方法可以更改URL的哈希值而又不会在浏览器的历史记录中留下任何条目并且无需重新加载?还是等效? 就细节而言,我正在按照以下方式开发一些基本的哈希导航: //hash nav -- works with js-tabs var getHash = window.location.hash; var hashPref = "tab-"; function useHash(newHash) { //set js-tab according to hash newHash = newHash.replace('#'+hashPref, ''); $("#tabs li a[href='"+ newHash +"']").click(); } function setHash(newHash) { //set hash according to js-tab window.location.hash = hashPref + newHash; //THIS IS WHERE …

15
Chrome中页面加载时的Popstate
Наэтотвопросестьответына 堆栈溢出нарусском:铬ненужнаяперезагрузкастраницы历史API 我正在为我的Web应用程序使用History API,但是有一个问题。我进行Ajax调用以更新页面上的某些结果,并使用history.pushState()来更新浏览器的位置栏,而无需重新加载页面。然后,当然,我使用window.popstate以便在单击后退按钮时恢复以前的状态。 这个问题是众所周知的-Chrome和Firefox对popstate事件的处理方式不同。尽管Firefox不会在首次加载时启动,但Chrome会启动。我想使用Firefox样式,并且不加载事件,因为它只会更新与加载结果完全相同的结果。除了使用History.js之外,还有其他解决方法吗?我不喜欢使用它的原因是-它本身需要太多的JS库,并且由于我需要在已经有太多JS的CMS中实现它,因此我想尽量减少我放入的JS 。 因此,想知道是否有一种方法可以使Chrome在加载时不会启动“ popstate”,或者有人尝试使用History.js,因为所有库都合并到一个文件中。

11
防止浏览器在HTML5历史记录popstate上滚动
发生popstate事件时,是否可以防止滚动文档的默认行为? 我们的网站使用jQuery动画滚动和History.js,并且状态更改应使用户通过pushstate或popstate滚动到页面的不同区域。问题是浏览器在发生popstate事件时会自动恢复先前状态的滚动位置。 我尝试使用设置为文档宽度和高度100%的容器元素,并在该容器内滚动内容。我发现的问题是,它似乎不像滚动文档那样平滑。尤其是在使用大量css3(例如框阴影和渐变)的情况下。 我还尝试了在用户启动滚动期间存储文档的滚动位置,并在浏览器滚动页面后(在popstate上)恢复了它的位置。在Firefox 12中可以正常工作,但在Chrome 19中,由于正在滚动和还原页面,因此会出现闪烁。我认为这与滚动和被触发的滚动事件(恢复滚动位置)之间的延迟有关。 Firefox在popstate触发之前先滚动页面(并触发scroll事件),Chrome先触发popstate然后再滚动文档。 我见过的所有使用历史API的网站都使用与上述类似的解决方案,或者在用户后退/前进时忽略滚动位置更改(例如GitHub)。 是否可以防止在popstate事件中根本滚动文档?

10
在我的AJAX应用程序中拦截对“后退”按钮的调用
我有一个AJAX应用。用户单击一个按钮,页面的显示就会改变。他们单击后退按钮,希望进入原始状态,但转而在浏览器中转到上一页。 如何截取并重新分配后退按钮事件?我已经研究过RSH之类的库(我无法使用...),而且我听说使用井号标签在某种程度上有所帮助,但我无法理解。

2
我可以在iframe中使用window.location.replace吗?
我们可以使用它window.location.replace来避免历史记录,并定位页面锚,而无需重新加载页面,但不能在iframe中使用吗? 问题是违反了CSP(内容安全策略),script-src 'unsafe-inline'必须启用该状态。除非我没有定义CSP,即使我定义了一个CSP并允许script-src 'unsafe-inline'它仍然给出相同的违规错误。在ie11 / chrome / ff中得到相同的结果。 iframe位于同一域(位于同一目录中)。 在控制台中定位iframe并在控制台中使用window.location.replace('/samepage.html#onpage_anchor')。 有用。 它以页面锚为目标,而无需重新加载页面和历史记录。 将相同的代码内联在锚链接上,它可以工作。 在外部脚本中使用相同的代码,获取csp违规错误。 如果不在iframe中,则效果很好。 我试图创建一个CSP允许的动作,但即使是在最宽松的内容安全策略可能会允许它。 编辑:所以我将示例放到允许多个文件的插件上,这样我就可以使用引用父/子页面的正确hrefs。 有关示例的示例的注释: 这些示例中未重现该问题。 该脚本即使在iframe中也可以完美运行。但是,相同的代码在我的本地服务器上不起作用,或者当我在VPS上实时运行该代码时。 我怀疑在plunker上不会触发CSP违规,因为plunker通过某种抽象层将内容呈现给浏览器。 第一次单击父级中的手风琴链接时,它会刷新。这是因为页面最初加载的方式没有引用index.html。后续点击将按预期工作,而无需重新加载页面。在iframe中这不是问题,因为它最初会引用child.html 这些是显示代码而无需进行任何更改即可使其工作的很好的示例(如需要更改href使其在stackoverflow代码段中工作,如下所述)。这也很好,因为它显示了javascript应当正常工作。但这并没有显示出实际的问题。您仍然需要在编辑器中加载它,然后在本地服务器或实时托管环境中运行它,才能看到真正的问题。 柱塞示例 有脚本: 无历史记录 无脚本: 有历史记录 简化的代码示例 一键输入的简单手风琴。足以重现问题。 单击打开/关闭将展开/折叠手风琴,不需要JS。JS应该做完全相同的事情,但是没有历史记录。工作正常,但不能在iframe中使用。 代码段注释: 您可以运行该代码段以了解我所描述的内容,但实际上并不能证明问题所在。 该代码段的行为与实际浏览器中的行为不同,JavaScript无法正常工作。 该代码段显示了代码,但应在iframe中运行以查看问题。在iframe外部运行它,以查看差异以及其工作原理。 由于链接如何与JS配合使用(替换整个url),因此它们实际上必须像这样,href="https://stackoverflow.com/thispage.html#ac1"而不是 href="#ac1"像它们出现在代码段中一样(不能以代码段中的实际html页面为目标)。因此,如果您在编辑器中尝试此操作 (请这样做),请记住将链接更改为此格式, this_document.html#anchor以使它们仍然是相同的页面定位点,但是page.html包含在链接中。 显示代码段 $(document).ready(function() { // anchor links without history $.acAnch = function(event) …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.