2013-05-18 1 views
5

문서 (http://www.asual.com/jquery/address/docs/)에서 볼 수 있듯이 플러그인에는 브라우저의 뒤로/앞으로 버튼을 눌렀을 때를 감지하는 이벤트가 있습니다.jquery 주소 플러그인의 앞뒤 구분

$ .address.externalChange (FN)

뒷면을 누를 때 전방을 누를 때 알 수있는 방법이 있다면 내 질문입니다. 예를 들어 두 경우 모두 사용할 수 있습니다.

$.address.externalChange(function() { console.log('back/forward pressed'); }); 

감사합니다.

답변

2

필자가 아는 한 기록 플러그인은 정확히 어떤 브라우저 버튼이 눌려 졌는지 탐지 할 수 없습니다.

가장 좋은 방법은 방문한 페이지의 기록을 유지 한 다음 새 페이지가 현재 기록보다 더 기록에 남아 있는지 확인하는 것입니다. 뒤로/앞으로 버튼을 사용하지 않고 페이지를 다시 방문하면 아래 코드로 잘못된 결과가 표시됩니다.

테스트되지 않은 예제 코드 :

var visitedPages = [$.address.path()]; 
var currentPage = $.address.path(); 

$.address.internalChange(function() { 
    visitedPages.push($.address.path()); 
}); 

$.address.externalChange(function() { 
    var newPage = $.address.path(); 
    var currentPageIndex = -1; 
    var newPageIndex = -1; 

    for (var i = 0; i < visitedPages.length; i++) { 
     if (visitedPages[i] == currentPage) currentPageIndex = i; 
     if (visitedPages[i] == newPage) newPageIndex = i; 
    } 

    if (newPageIndex == -1 || currentPageIndex == -1) { 
     console.log("unkown button pressed"); 
    } else { 
     if (newPageIndex > currentPageIndex) { 
      console.log('forward pressed'); 
     } else 
     if (newPageIndex < currentPageIndex) { 
      console.log('back pressed'); 
     } else { 
      console.log('page reloaded?'); 
     } 
    } 
}); 
+0

정말 작동하지 않습니다. 나는 jsfiddle를 만들려고 노력하고 있지만 나는 능력이 없다. 감사합니다 – Alvaro

+0

나는 현상금을 주었지만 여전히 작동하지 않습니다. 바이올린을 올리시겠습니까? – Alvaro

+0

어쩌면 당신은 바이올린을 시작할 수 있고 우리는 거기서 문제가 무엇인지 보게 될 것입니까? – Tyron

0

드디어 알아 냈어. 이 코드는 페이지 탐색, 페이지 1, 페이지 2, 페이지 3 등을 탐색하는 일반적인 페이지 탐색에서 작동합니다. 코드는 이러한 경우 앞뒤로 인식합니다.

var visitedPages = [$.address.path()]; 
var first_load = true; 

$.address.internalChange(function() { 

    visitedPages.push($.address.path()); 

}); 

$.address.externalChange(function() { 

    var newPage = $.address.path(); 

    if (visitedPages[visitedPages.length-2] == newPage) { 

     console.log('back'); 
     visitedPages.splice(visitedPages.length-1 , 1); 

    } else if (first_load === false) { 

     console.log('forward');  
     visitedPages.push($.address.path()); 

    } 

    first_load = false; 

}); 
관련 문제