我正在开发一个应用程序,它使用通过其添加到历史记录中的视图
history.pushState() 功能
视图是表单中的不同步骤,其中用户意图能够返回到先前步骤并进行调整但不转发而不重新发布.
我通过监听popstate事件并在调用的函数中向后导航一步来实现后向导航
问题是,当popstate被调用时,浏览器中的历史记录变得可点击,原因很明显.但是,由于历史转发按钮也会触发一个popstate事件,因此向前点击历史记录的结果是您向后退一步.
由于我不希望用户能够向前推进历史记录,因此我希望清除前向历史记录.
所以我的问题基本上是,当您退回浏览器历史记录时,有没有办法删除前进历史记录?
我正在使用HTML 5历史API来保存ajax请求时的状态,如果用户请求同一页面没有ajax请求,我提供完整的html内容.
浏览器的"重新打开最后关闭的选项卡"功能带来了最后的ajax请求内容而无需点击服务器.如果浏览器会在没有带上一个请求内容的情 但浏览器只显示最后的ajax请求内容.
我在Chrome 17,Firefox 10上遇到过这种情况.(我没有在ie9上尝试过,因为它没有支持历史记录api)
什么是这个问题的众所周知的解决方案?
编辑:这些ajax请求只是向服务器"获取"请求.
它真的不可能在jsfiddle.net中展示它,因为几乎没有理由.您可以在本地主机中演示它,如下所示.
向服务器发出"get"请求并拉出json对象,然后将该url推送到历史api中,如下所示.
history.pushState(null,null,url);
Run Code Online (Sandbox Code Playgroud)
然后关闭该选项卡,然后单击浏览器的"重新打开上次关闭的选项卡"功能.你看到了什么 ?Json回应身体?浏览器显示它而不向服务器发出请求,对吧?
我需要知道来到我网站的人是否来自另一个特定的网站.例:
结果我的页面上的消息:
Welcome! You already know how it works, register now!Welcome! Please watch our video first at www.youtube.com/myvideo我的问题是:
$_SERVER['HTTP_REFERER']使用PHP,但它无法正常工作,我读到它并不适用于所有浏览器.当用户按下这样的后退按钮时,我需要阻止浏览器捕捉到前一个滚动位置:
<a href="javascript:history.go(-1)"
onClick="javascript:history.go(-1)" title="< GO BACK"></a>
Run Code Online (Sandbox Code Playgroud)
按下该按钮后,浏览器将返回到此页面上的上一个滚动位置,我想停止该行为,只需加载页面顶部即可.
希望有人知道正确的解决方案.
-exemple-
打开页面向下滚动转到新页面并点击后退按钮页面将自动向下滚动到您之前滚动的位置!
我试图在浏览器的控制台中输入以下代码:
window.onpopstate = function() {alert(1);}
Run Code Online (Sandbox Code Playgroud)
然后单击后退按钮.没有警报显示.难道我做错了什么?或者是否不允许将popstate事件从控制台绑定到页面?
使用Chrome 24和Firefox 18
我熟悉html5 History API,但我使用history.js来扩展兼容性,
我有一个问题就是这样,我怎么知道:
History.Adapter.bind(window,'statechange',function(){ // Note: We are using statechange instead of popstate
var State = History.getState(); // Note: We are using History.getState() instead of event.state
/* Condition here to know if this change is a back or next button, and wich one?? */
});
Run Code Online (Sandbox Code Playgroud)
这是我的"整体"代码......
var the = this;
var History = window.History;
if ( !History.enabled ) {
return false;
}
/* Store the initial content*/
History.replaceState({
content: $('#main').html()
}, document.title, document.location.href);
/* Bind to StateChange …Run Code Online (Sandbox Code Playgroud) 如何使用WebBackForwardList类获取WebView的历史记录?我查看了文档页面,但我无法理解,WebBackForwardList是否正确访问WebView的历史记录?我打算将历史解析为ListView,我找不到任何关于如何访问WebView历史的例子,获取历史的正确方法是什么?
使用history.pushState,我们可以使用历史记录API更改当前网址.使用popstate功能,我们可以回到上一页.但回过头来,我发现浏览器"点击此处继续"中的前向链接按钮被禁用.现在,使用历史记录,我需要访问该按钮的属性.
我们如何使用历史记录API访问转发按钮的网址?
我正在使用带有历史记录的react-router useQueries(createHashHistory)(),我想要根据路由配置阻止导航到多个路由.
所以路由配置如下:
<Route path="/" name={RouteNames.APP} component={AppContainer}>
<Route path="view-1"
onEnter={ view1onEnter }
onLeave={ view1onLeave }
component={ View1 }
canNavigate={ false }
/>
<Route path="view-2"
onEnter={ view2onEnter }
onLeave={ view2onLeave }
component={ View2 }
canNavigate={ true }
/>
...
</Route>
Run Code Online (Sandbox Code Playgroud)
所以我们假设我正在进行#/view-2并调用类似的动作history.push({pathname: '/view-1'});.但是一旦路由view-1有一个标志canNavigate={false}- 我想阻止导航到它并显示消息而不改变散列和任何其他副作用(如调用onLeave挂钩view-2).
我正在考虑听history:
history.listenBefore((location, callback) => {
//e.g. callback(false) to prevent navigation
})
Run Code Online (Sandbox Code Playgroud)
但我无法获得路由实例来检查canNavigate标志.
后来我发现history有一个方法match实际上根据给定的下一个路由器状态location: …
在我的应用程序中,要使用以下代码隐藏URL中的某些信息。
history.replaceState ({}, "", "bar.html");
Run Code Online (Sandbox Code Playgroud)
它可以在所有浏览器中运行,但最新版本为firefox(v56 +)
在Firefox中,如果我按F5键,则它会返回到我已被上述代码替换的上一个URL。
任何帮助将不胜感激。
browser-history ×10
javascript ×6
html5 ×4
firefox ×2
jquery ×2
ajax ×1
android ×1
api ×1
browser ×1
history.js ×1
html ×1
php ×1
popstate ×1
react-router ×1
reactjs ×1
url ×1
web ×1
webview ×1