Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用jquery历史插件处理页面刷新_Jquery_Page Refresh_History.js - Fatal编程技术网

使用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

今天困扰我的问题是“如何用jQuery历史插件捕捉页面刷新”

从几个代码开始:

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来实现这一点:

  • 假设您想刷新www.my-site/page1:tell.htaccess以重定向页面1

    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]
    
  • 您的index.php将收到一个请求参数,检索它:

    $_REQUEST['request']
    
  • bis:如果您有复杂的URL(www.my-site/page1/page2),请进行分解:

    $args = explode('/', rtrim($_REQUEST['request'], '/'));
    
  • 写入javascript变量:

    var pageToLoad = page1;
    
  • DOM就绪后,执行适当的操作:

    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来实现这一点:

  • 假设您想刷新www.my-site/page1:tell.htaccess以重定向页面1

    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]
    
  • 您的index.php将收到一个请求参数,检索它:

    $_REQUEST['request']
    
  • bis:如果您有复杂的URL(www.my-site/page1/page2),请进行分解:

    $args = explode('/', rtrim($_REQUEST['request'], '/'));
    
  • 写入javascript变量:

    var pageToLoad = page1;
    
  • DOM就绪后,执行适当的操作:

    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插件,这就做到了。。。希望有帮助!谢谢,我正在使用相同的插件。但是,当我在浏览器中手动刷新时,浏览器不会加载当前页面,而是会给我应用程序的第一页。如果刷新,您有任何问题吗?