2013-09-06 102 views
15

Tôi cần trỏ một trang đến trang khác và sau đó cuộn đến một phần cụ thể. Trong Chrome, hãy làm www.example.com # section1 sẽ thực hiện thủ thuật (# section1 có thể là một neo hoặc id của phần tử).Safari bỏ qua/xóa bỏ thẻ hashatags khi nhấp vào siêu liên kết?

Tôi đã thử nó trong Chrome và Firefox và trong cả hai trình duyệt nó hoạt động tốt (đưa tôi đến trang và sau đó cuộn tự động để neo tuy nhiên trong safari băm biến mất khi tôi nhấp vào liên kết.

Tại sao Điều này xảy ra? Có thể làm điều đó trên Safari, nếu không làm cách nào tôi có thể giải quyết vấn đề này?

Trả lời

22

Khi sử dụng siêu liên kết trỏ đến phần bên trong trên các trang khác, bạn phải nhớ thêm dấu gạch chéo (/) trước thẻ bắt đầu bằng # cho tương thích trình duyệt chéo.

Ví dụ: www.example.com/#item-1

làm www.example.com#item-1 không được chấp nhận bởi tất cả các trình duyệt (rõ ràng bằng Chrome và Firefox nó là)

+0

Chỉ muốn thứ gì đó có thể giúp đỡ người khác. Tôi đã có cùng một vấn đề. Định dạng chính xác như giải pháp. Tuy nhiên, máy chủ đã sử dụng mod-viết lại để thay đổi đường dẫn (Wordpress .htaccess). Dường như, Safari sẽ băm băm khi url được máy chủ chuyển hướng. – mrbinky3000

+0

Bạn cũng cần điều này cho các URL trông giống như tên thư mục, chẳng hạn như 'http: // www.example.com/foo # item-1'. Safari chuyển hướng ở đây sẽ thả đoạn. Thay vào đó, bạn phải gửi chúng ở đây 'http: // www.example.com/foo/# item-1'. – micah94

0

Đối với tôi nó đã cùng một vấn đề chính xác như mrbinky3000 đã nêu ở trên: Các máy chủ mod-rewrite đã giết chết băm trong safari.

Giải pháp là sử dụng một liên kết tuyệt đối đầy đủ như: http://www.example.com/path/#item-1

-1

Tôi đã có một vấn đề liên quan với Safari (trên iPhone/iOS) dường như tước băm/mảnh khi làm một:

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

Vấn đề thực tế là lỗi javascript chỉ xuất hiện trên Safari. Vì tôi không thể dễ dàng đánh giá một bảng điều khiển javascript cho iPhone, tôi đã chọn tải xuống phiên bản cũ của Safari của Window (related post, download).

Sau đó, tôi có thể sao chép sự cố từ iPhone trên màn hình của Cửa sổ bằng cách sử dụng phiên bản Safari cũ. Tại thời điểm đó, tôi đã tìm thấy thẻ javascript bị thiếu ']'. Đây là một lỗi hợp pháp, nhưng nó đã bị Chrome, Firefox và IE bỏ qua.

Window.location.replace() thậm chí không được gọi, vì mã đã bị vi phạm trên lỗi javascript. Vì vậy, vấn đề không phải là Safari đã loại bỏ thẻ bắt đầu bằng #, mặc dù nó xuất hiện theo cách đó từ thử nghiệm đa trình duyệt.

4

trường hợp: Tôi có các thông số sau khi '#' như url # myParam = 123, khi tôi thay đổi params như url # myParam = 789 Safari đôi khi nạp trang trước dựa trên myParam = 123,

mặc dù trong Địa chỉ thanh nó hiển thị myParam = 789

Giải pháp: Sử dụng url? # myParam = 123, sau đó Safari sẽ tải mọi trang mới.
Sử dụng '?' trước khi '#' giải quyết được vấn đề của tôi.

+0

Làm việc tốt cho tôi. Cảm ơn –

+0

Đã làm việc tốt cho tôi. Nếu tôi chuyển hướng bằng 301 đến/sites/# config, Safari hãy truy cập/sites /, nhưng khi tôi chuyển hướng đến/sites /? # Config, Safari hãy truy cập/sites /? # Config Tôi đã chỉnh sửa chức năng chuyển hướng của mình để thêm " ? " nếu thiếu khi hàm băm nằm trong url. –