2013-09-06 23 views
15

Muszę wskazać jedną stronę na drugą, a następnie przewinąć do określonej sekcji. W Chrome robi to pod adresem www.example.com # sekcja1 (# sekcja1 może być kotwicą lub identyfikatorem elementu).Safari ignoruje/usuwa hashatagi podczas klikania hiperłączy?

Próbowałem go w Chrome i Firefox iw obu przeglądarkach to działa dobrze (automatycznie bierze mnie na stronę i następnie przewija do kotwicy jednak w safari hash znika po kliknięciu na link.

Dlaczego Czy można to zrobić na Safari, jeśli nie, jak mogę obejść ten problem?

Odpowiedz

22

Podczas korzystania z hiperłączy wskazujących na wewnętrzne sekcje na innych stronach należy pamiętać o dodaniu ukośnika (/) przed hashtagiem dla zgodności z różnymi przeglądarkami

Np .: www.example.com/#item-1

robi www.example.com#item-1 nie jest akceptowany przez wszystkich przeglądarkach (podobno Chrome i Firefox to jest)

+0

Po prostu chciałam czegoś, co może pomóc innym. Miałem ten sam problem. Format był dokładnie taki, jak rozwiązanie. Jednak serwer korzystał z modyfikującego modr do zmiany ścieżki (Wordpress. Htaccess). Wygląda na to, że Safari usuwa hasz po przekierowaniu adresu URL przez serwer. – mrbinky3000

+0

Potrzebujesz tego również w przypadku adresów URL, które wyglądają jak nazwy katalogów, takie jak 'http: // www.example.com/foo # item-1'. Przekierowanie Safari spowoduje usunięcie tego fragmentu. Musisz zamiast tego wysłać je tutaj: http: // www.example.com/foo/# item-1'. – micah94

0

Dla mnie to był dokładnie taki sam problem jak mrbinky3000 stwierdził powyżej: Serwer mod-rewrite zabijał hash w safari.

Rozwiązaniem było wykorzystać pełną bezwzględną odnośnik jak: http://www.example.com/path/#item-1

-1

miałem Problem związany z Safari (na iPhone/iOS) pozornie odciągnięciu hash/fragment kiedy robi:

var newHash = ...; 
window.location.replace("#" + newHash); 

W rzeczywistości problem z był javascript error, który pojawił się tylko w Safari. Ponieważ nie mogłem łatwo ocenić konsoli javascript dla iPhone'a, zdecydowałem się pobrać starszą wersję przeglądarki Safari (related post, download).

Następnie mógłbym zreplikować problem z iPhone'a na pulpicie mojego Windowsa przy użyciu starej wersji Safari. W tym momencie zauważyłem, że znacznik javascript miał brakujące "" ". To był uzasadniony błąd, ale został w jakiś sposób zignorowany przez Chrome, Firefox i IE.

Wywołanie window.location.replace() nie było nawet wywoływane, ponieważ kod został przerwany na błąd javascript. Problem polegał nie na tym, że Safari usuwał hashtag, mimo że wyglądał tak w testach przeprowadzanych na wielu przeglądarkach.

4

Case: Mam parametry po '#' jak url # myparam = 123, kiedy zmienił params jak url # myparam = 789 Safari czasami załadowany poprzedniej strony na podstawie myparam = 123,

chociaż Adres pasek pokazał myParam = 789

Rozwiązanie: Użyj adresu URL? # myParam = 123, a następnie Safari będzie za każdym razem ładował nową stronę.
Korzystanie z "?" zanim "#" rozwiązało mój problem.

+0

Sprawdziło się dobrze dla mnie. Dziękuję –

+0

Sprawdziło się również dla mnie. Jeśli przekierowuję przez 301 do/sites/# config, Safari przechodzę do/sites /, ale kiedy przekierowuję do/sites /? # Config, Safari idzie do/sites /? # Config Edytowałem moją funkcję przekierowania, aby dodać " ? " jeśli brakuje, gdy hash jest wewnątrz url. –