使用jquery历史插件处理页面刷新
今天困扰我的问题是“如何用jQuery历史插件捕捉页面刷新” 从几个代码开始:使用jquery历史插件处理页面刷新,jquery,page-refresh,history.js,Jquery,Page Refresh,History.js,今天困扰我的问题是“如何用jQuery历史插件捕捉页面刷新” 从几个代码开始: function changePage(PageURI){ History.pushState({PageURL:PageURI}, PageURI, "/"+PageURI); } // Bind to StateChange Event History.Adapter.bind(window,'statechange',function(){ var State = History.getSta
function changePage(PageURI){
History.pushState({PageURL:PageURI}, PageURI, "/"+PageURI);
}
// Bind to StateChange Event
History.Adapter.bind(window,'statechange',function(){
var State = History.getState();
dispatchURL(State.data.PageURL);
});
因此,在更美好的世界中,一切都完美运行,我所有的锚都有一个:
onclick="javascript:changePage('New-Page');"
诀窍是,当我刷新页面(F5或浏览器图标)时,不会触发History statechange事件(这是可以理解的,因为URL不会更改),但这对我的事务不好
那个么,使用历史插件的人可以告诉我他们是如何处理页面刷新的,或者告诉我如何通过历史(或者只是jquery)事件捕获页面刷新事件吗
谢谢
编辑
在等待更好的解决方案时,这里有一个解决方法:
window.onbeforeunload = function() {
History.pushState({PageURL:'#'}, '#', '/#');
}
我的网站是完全的ajax,这意味着我从不刷新浏览器以从一页转到另一页 因此,当我进行页面刷新(或直接访问特定页面)时,我必须在服务器端处理它,以知道调用了哪个页面,并将适当的参数传递给我的javascript以显示所需的内容 我使用一种RESTfull api来实现这一点:
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+index\.php\?request=page1 [NC]
RewriteRule ^ /page1? [R=301,L]
RewriteRule ^page1$ index.php?request=page1 [QSA,NC,L]
$_REQUEST['request']
$args = explode('/', rtrim($_REQUEST['request'], '/'));
var pageToLoad = page1;
if(typeof pageToLoad !== 'undefined'){
if(pageToLoad==='page1'){
// DISPLAY WHAT YOU NEED
}
}
(function(window,undefined){
History.Adapter.bind(window,'statechange',function(){
var State = History.getState();
dispatchURL(State.data.PageURL, State.data.PageID);
});
})(window);
页面刷新时不会触发任何statechange事件,所以您可以做的是测试当前状态(注意,我给了我的PageID一个不同的参数,因为如果所有参数都与以前的状态相同,statechange事件仍然不会触发!!)
我的网站是完全的ajax,这意味着我从不刷新浏览器以从一页转到另一页 因此,当我进行页面刷新(或直接访问特定页面)时,我必须在服务器端处理它,以知道调用了哪个页面,并将适当的参数传递给我的javascript以显示所需的内容 我使用一种RESTfull api来实现这一点:
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+index\.php\?request=page1 [NC]
RewriteRule ^ /page1? [R=301,L]
RewriteRule ^page1$ index.php?request=page1 [QSA,NC,L]
$_REQUEST['request']
$args = explode('/', rtrim($_REQUEST['request'], '/'));
var pageToLoad = page1;
if(typeof pageToLoad !== 'undefined'){
if(pageToLoad==='page1'){
// DISPLAY WHAT YOU NEED
}
}
(function(window,undefined){
History.Adapter.bind(window,'statechange',function(){
var State = History.getState();
dispatchURL(State.data.PageURL, State.data.PageID);
});
})(window);
页面刷新时不会触发任何statechange事件,所以您可以做的是测试当前状态(注意,我给了我的PageID一个不同的参数,因为如果所有参数都与以前的状态相同,statechange事件仍然不会触发!!)
您可以这样做:
function changePage(PageURI){
History.pushState({PageURL: PageURI, rand: Math.random()}, PageURI, "/"+PageURI);
}
不确定此方法是否有任何缺点,但它会在页面刷新时触发状态更改。您可以执行以下操作:
function changePage(PageURI){
History.pushState({PageURL: PageURI, rand: Math.random()}, PageURI, "/"+PageURI);
}
不确定此方法是否有任何缺点,但它会在页面刷新时触发状态更改。您是否使用history.js插件找到了此刷新案例的解决方案?如果是,请回复。thanksI使用的是HTML5+HTML4插件。通过只使用HTML5插件,这就做到了。。。希望有帮助!谢谢,我正在使用相同的插件。但是,当我在浏览器中手动刷新时,浏览器不会加载当前页面,而是会给我应用程序的第一页。如果刷新,您有没有遇到任何问题?您是否使用history.js插件为这个刷新案例找到了任何解决方案?如果是,请回复。thanksI使用的是HTML5+HTML4插件。通过只使用HTML5插件,这就做到了。。。希望有帮助!谢谢,我正在使用相同的插件。但是,当我在浏览器中手动刷新时,浏览器不会加载当前页面,而是会给我应用程序的第一页。如果刷新,您有任何问题吗?