On - window.location.hash - Change?

Naviqasiya üçün Ajax və hash istifadə edirəm.

window.location.hash dəyişdiyini yoxlamaq üçün bir yol varmı?

http://example.com/blah # 123 ünvanında http://example.com/blah # 456

Bir sənəd yükləyərkən onu yoxlayıramsa işləyir.

Ancaq #hash əsaslı bir naviqasiya sistemi varsa, brauzerin arxa düyməsini basdığımda işləmir (buna görə # 456-dan blah # 123-ə keçə bilərsiniz).

Bu ünvan sahəsinin içərisində göstərilir, amma javascript vasitəsilə onu tuta bilmirəm.

515
25 марта '09 в 12:10 2009-03-25 12:10 MilMike martın 25-də saat 12:10 'də soruşdu 2009-03-25 12:10
@ 13 cavab

Həqiqətən bunu etmək üçün yeganə yol (və "realsimplehistory" bunu necədir), mövcud hash'i yoxlayır və onu əvvəllər nə ilə müqayisə edən bir aralıq təyin etməkdir, biz bunu edəcəyik və abunəçiləri yayınladığımız dəyişdiyimiz hadisəyə abunə olunsun hash dəyişirsə .. onun mükəmməl deyil, brauzerlər həqiqətən bu hadisəni əvvəlcə dəstəkləmirlər.


Bu cavabı təzə saxlamaq üçün yeniləmə:

Əgər jQuery istifadə edirsinizsə (bu gün bir çox əsaslı olmalıdır), yaxşı bir çözüm soyuducu istifadə etməkdir jQuery, pəncərə obyektində hashchange hadisələrini dinləmək üçün hadisə sisteminizi istifadə edir.

 $(window).on('hashchange', function() { //.. work .. }); 

Burada hashchange dəstəklə bağlı narahatlığa ehtiyac duymayan kodu yaza bilərsiniz ki, gözəldir, lakin bəzi jQuery funksiyası jQuery xüsusi tədbirlər şəklində bəzi sehrli etmək lazımdır.

Bu funksiyaya əsasən, kimsə bir hadisə (məsələn, bir hadisə bağlanması) bir şəkildə istifadə etməyə cəhd zaman, faktiki olaraq, hər hansı bir hadisə üçün bəzi quraşdırma kodu çalıştırabilirsiniz.

Bu quraşdırma kodunda, əlaqədar brauzerinizin dəstəklərini yoxlaya bilərsiniz və brauzer bunu tətbiq etmirsə, dəyişiklikləri anket etmək və jQuery hadisə tetiklemek üçün bir taymer qura bilərsiniz.

Bu kodunuzu tamamilə dəstəkləyən bu problemi anlamaq üçün ehtiyacınızdan yayındırır, bu cür xüsusi bir tədbirin həyata keçirilməsi çox əhəmiyyətsizdir (sadə 98% iş versiyası almaq üçün), amma niyə başqası artıq olarsa .

587
25 марта '09 в 12:38 2009-03-25 12:38 cavab mart ayının 25-də saat 12: 37 - də meandmikoda verilən cavab 2009-03-25 12:38

HTML5 bir hashchange hadisə göstərir . Bu hadisə bütün müasir brauzerlər tərəfindən dəstəklənir . Dəstək aşağıdakı browser versiyalarında əlavə edildi:

border=0
  • Internet Explorer 8
  • Firefox 3.6
  • Chrome 5
  • Safari 5
  • Opera 10.6
267
25 марта '09 в 13:33 2009-03-25 13:33 Cavab Miles 25 Mart 2013 tarixində saat 13:33 'də verilir

Internet Explorer 7 və Internet Explorer 9-da vəziyyətin düzgün olacağına (pencerelerdeki "onhashchange" üçün), lakin window.onhashchange heç vaxt işləməyəcəyini window.onhashchange , hash saxlamaq və hər 100 milisaniyədə dəyişdikdə onu yoxlamaq yaxşıdır və ya Internet Explorer-ın bütün versiyaları üçün deyil.

  if (("onhashchange" in window)  !($.browser.msie)) { window.onhashchange = function () { alert(window.location.hash); } // Or $(window).bind( 'hashchange',function(e) { // alert(window.location.hash); // }); } else { var prevHash = window.location.hash; window.setInterval(function () { if (window.location.hash != prevHash) { prevHash = window.location.hash; alert(window.location.hash); } }, 100); } 

EDIT - jQuery 1.9 ildən, $.browser.msie dəstəklənmir. Mənbə: http://api.jquery.com/jquery.browser/

48
28 июня '11 в 18:42 2011-06-28 18:42 Cavab 28 İyun 2011-ci il tarixində saat 18 : 42-də Xan Salahuddin tərəfindən verilmişdir

IE brauzerlər tarix və window.location.hash ilə bağlı bir çox fəndlər var:

  • Başlanğıc nöqtəsi olaraq, a.html # b'den a.html # c gedin və sonra geri düyməsini basın, brauzer bu səhifənin dəyişdiyini bilmir. Bunu nümunə ilə söyləyim: window.location.href a.html # b və ya a.html # c olduğundan asılı olmayaraq, "a.html # c" olacaq.

  • Əslində a.html # b və a.html # c tarixdə yalnız '<a name = "# b">' və '<a name =" # c">' səhifənin əvvəllərində mövcud olduqda saxlanılır .

  • Bununla belə, səhifənin içində bir iframe qoysanız, bu iframe a.html # b-dən a.html # c-ə gedin və return düyməsini basın, iframe.contentWindow.document.location.href gözlənildiyi kimi dəyişəcək.

  • Kodunuzda "document.domain = bir şey" istifadə edirsinizsə, iframe.contentWindow.document.open () "(və bir çox tarixi menecerləri bunu)

Bilirəm ki, bu, real cavab deyil, bəlkə də IE-Tarix qeydləri kimsə üçün faydalıdır.

13
30 окт. Sergio Cinos tərəfindən verilmiş cavab 30 oktyabr. 2009-10-30 03:19 '09 at 3:19 2009-10-30 03:19

Firefox 3.6 ilə bir onhashchange hadisə idi. Window.onhashchange baxın.

12
24 июня '10 в 20:29 2010-06-24 20:29 cavab 24 iyun 2010 tarixində saat 20: 30 -da veriləcək

Ben Allman bu ilə çalışmaq üçün böyük bir jQuery plugin var: http://benalman.com/projects/jquery-hashchange-plugin/

Əgər jQuery istifadə etmirsinizsə, bu disektiv üçün maraqlı bir link ola bilər.

11
Cavab CJ tərəfindən verilir . 19 oktyabr 2010-10-19 20:46 '10 at 20:46 2010-10-19 20:46

Window.location obyektinin "hash" əmlakı ilə asanlıqla bir müşahidəçi ("görünüş" üsulu) tətbiq edə bilərsiniz.

Firefox, obyektin dəyişikliklərini nəzərdən keçirmək üçün öz tətbiqinə malikdir, lakin bəzi digər tətbiqlərdən istifadə edirsinizsə (məsələn, JavaScript obyektində dəyişikliklərə baxın ) bu, digər brauzerlər üçün bir hiylə olacaq.

Kod belədir:

 window.location.watch( 'hash', function(id,oldVal,newVal){ console.log("the window hash value has changed from "+oldval+" to "+newVal); } ); 

Sonra onu yoxlaya bilərsiniz:

 var myHashLink = "home"; window.location = window.location + "#" + myHashLink; 

Əlbətdə ki, bu müşahidəçi funksiyasını çağırır.

9
29 окт. Cavab gion_13 29 oct verilir . 2010-10-29 12:04 '10 at 12:04 2010-10-29 12:04

Lazımlı bir tətbiq http://code.google.com/p/reallysimplehistory/ ünvanında tapa bilərsiniz. Var olan yeganə (lakin) problem və səhvdir: Internet Explorer-da yer hashini dəyişdirərək, bütün tarix yığını əl ilə sıfırlayırsınız (bu, brauzerlə bağlı problemdir və həll edilə bilməz).

Qeyd Internet Explorer 8, hashchange hadisəsi üçün dəstək verir və HTML5-in bir hissəsi olduğundan, digər brauzerlərin yetişməsini gözləmək olar.

6
25 марта '09 в 12:31 2009-03-25 12:31 Cavab Sergey Ilininskiyə 25 mart 2013 - il saat 12: 53 -da verilir

Başqa bir böyük tətbiq, brauzer tərəfindən dəstəklənirsə, onda gözlənilən funksiyaların müvəffəqiyyətlə emal olmasını təmin etmək üçün bir iframe və ya brauzer aralığında istifadə olunmayacaqsa, öz onhashchange hadisəindən istifadə edəcək jQuery tarixi . Ayrı-ayrı ölkələrə bağlanmaq üçün yaxşı bir interfeys də təmin edir.

Başqa diqqətəlayiq bir layihə jQuery Ajaxy , böyük ölçüdə mix üçün ajax əlavə etmək üçün jQuery tarixinin bir uzantısıdır. Siz xəsarətlə ajax istifadə etməyə başladığınızda, bu olduqca çətin deyil !

1
28 авг. baluptanın cavabı 28 aug. 2010-08-28 20:00 '10 saat 20:00 'da 2010-08-28 20:00
 var page_url = 'http://www.yoursite.com/'; // full path leading up to hash; var current_url_w_hash = page_url + window.location.hash; // now you might have something like: http://www.yoursite.com/#123 function TrackHash() { if (document.location != page_url + current_url_w_hash) { window.location = document.location; } return false; } var RunTabs = setInterval(TrackHash, 200); 

Belə ki, ... Geri və ya Geri düymələrinə basdığınız anda, səhifə yenidən yeni hash dəyərinə görə yenidən yüklənir.

1
25 февр. cavab fevral ayının 25-də batman tərəfindən verilir 2011-02-25 05:40 '11 saat 05:40 'da 2011-02-25 05:40

URL'yi istifadəçinin yerləşdiyi formaya görə fərqli parametrləri göstərmək üçün reaktiv tətbiqdə istifadə etdim.

Hash parametresini istifadə edərək baxdım

 window.addEventListener('hashchange', doSomethingWithChangeFunction()); 

Sonra

 doSomethingWithChangeFunction () { // Get new hash value let urlParam = window.location.hash; // Do something with new hash value }; 

Browser brauzerinin tarixində olduğu kimi, irəli və tərs istiqamətdə brauzer düymələri ilə işləyərək zövqlə çalışdı.

1
07 дек. Sprose tərəfindən verilmiş cavab 07 Dek 2017-12-07 17:36 '17 də 17:36 'də 2017-12-07 17:36

Müştəri tərəfi marşrutlaşdırma üçün path.js istifadə edirəm. Mən çox qısa və asan tapdım (həmçinin NPM-də də dərc edilib) və hash-based naviqasiya istifadə edir.

path.js NPM

path.js github

1
03 янв. Cavab Tom 3 Jan 2015-01-03 01:23 '15 at 1:23 2015-01-03 01:23

Mən jQuery plugin, HUtil istifadə və onun üst bir interfeys kimi YUI Tarix yazdı.

Bir dəfə yoxlayın. Yardıma ehtiyacınız varsa, kömək edə bilərəm.

0
28 дек. cavab verdi moha297 28 dec. 2009-12-28 20:25 '10 saat 20:25 'də, 2009-12-28 20:25

tags ilə bağlı digər suallar və ya bir sual