2015-08-14 31 views
8

Tarayıcılar, window.history nesnesi aracılığıyla bir istemci oturumu içinde ziyaret edilen sayfaların bir listesini sağlar. Bununla birlikte, istemci kodu listede ileri ve geri gidebilir (history.back(), history.forward() ve history.go() kullanarak).Tarayıcı geçmişinde geçerli konum dizini nasıl bulunur?

Ancak, istemci kodu, geçerli sayfanın bulunduğu tarihte nerede nerede belirleyebilir? Örneğin, istemci A, B ve C sayfalarını ziyaret ederse, geçmiş üç öğe içerir ve geçerli geçmiş öğesi (veya durum) sayfa C olacaktır. Eğer kullanıcı daha sonra 'geri' düğmesini tıklatırsa, geçerli sayfa şimdi B'dir. Bununla birlikte, history.length hala 3'tür, bu da toplamda üç sayfanın ziyaret edildiğini yansıtır. Müşterinin şu anda tarihte 2. maddede olduğunu nasıl belirliyoruz?

Daha özel bir sorun, geçmişte ilk öğede konumlandırılıp konumlandırılmadığımı belirlemek istiyorum, böylece sayfayı kapatacak bir 'Kapat' düğmesi görüntüleyebilirim (window.opener'un boş olmadığını varsayarak); geçmişte herhangi bir başka konumda, bir önceki sayfaya gidilecek olan 'Geri' düğmesini görüntülemek istiyorum.

Bu, tarih nesnesinde 'geçerli dizin' olmadığını merak eden bir ihmal gibi görünüyor.

Not: Bu, question #12895940'a benzer, ancak aslında sadece tarihin ilk konumunda konumlandırıldığımı bilmem gerektiğinden farklıdır. Bu tarih yığını sayfa ilk yüklendiğinde üzerine durum nesnesi iter

// Onload 
{ 
    if (!history.state && typeof(history.replaceState) == "function") 
     history.replaceState({ page: history.length, href: location.href }, "foo"); 
} 

:

+2

[şu anda tarayıcı geçmişinde nerede olduğunu bul] olası bir kopyası (http://stackoverflow.com/questions/12895940/find-out-where-in-browser-history-the-user-is) – duskwuff

+0

As Yukarıdaki konuya (@duskwuff) söylendiği gibi, "her zaman" tarihini takip etmek için bir web uzantısı gibi bir şey oluşturmadıkça bunu JavaScript'te yapmanın bir yolu olmadığını düşünüyorum. Ama bahse girerim aradığınız çözüm değil – lockedz

cevap

5

(yalnızca HTML5 + tarayıcılarda çalışır) Ben ile geldi tek şey bu çizgisinde bir şeydir. (typeof denetleme gerekmektedir tarayıcı HTML5 replaceState() yöntemini desteklediğinden emin olun.)

Daha sonra şimdiki tarih nesnesi yerini aldı listedeki ilk olup olmadığını kontrol edebilirsiniz:

if (history.state && history.state.page == 1) { 
    // It appears that we are positioned at the first history item 
    ... 
} 

Bu ihtiyacım olan şey için yeterli görünüyor.

İlgili konular