Dấu bát phân / dấu số / dấu băm có một ý nghĩa đặc biệt trong một URL, nó thường xác định tên của một phần của tài liệu. Thuật ngữ chính xác là văn bản theo sau hàm băm là phần neo của một URL. Nếu bạn sử dụng Wikipedia, bạn sẽ thấy hầu hết các trang đều có mục lục và bạn có thể chuyển đến các phần trong tài liệu bằng một neo, chẳng hạn như:
https://en.wikipedia.org/wiki/Alan_Turing#Early_computers_and_the_Turing_test
https://en.wikipedia.org/wiki/Alan_Turing
xác định trang và Early_computers_and_the_Turing_test
là mỏ neo. Lý do mà Facebook và các ứng dụng điều khiển Javascript khác (như Wood & Stones của riêng tôi ) sử dụng các neo là vì họ muốn làm cho các trang có thể đánh dấu trang (như được đề xuất bởi một nhận xét về câu trả lời đó) hoặc hỗ trợ nút quay lại mà không cần tải lại toàn bộ trang từ máy chủ .
Để hỗ trợ đánh dấu trang và nút quay lại, bạn cần thay đổi URL. Tuy nhiên, nếu bạn thay đổi phần trang (với một cái gì đó như window.location = 'http://raganwald.com';
) thành một URL khác hoặc không chỉ định một neo, trình duyệt sẽ tải toàn bộ trang từ URL. Hãy thử điều này trong bảng điều khiển Javascript của Fireorms hoặc Safari. Tải http://minimal-github.gilesb.com/raganwald
. Bây giờ trong bảng điều khiển Javascript, gõ:
window.location = 'http://minimal-github.gilesb.com/raganwald';
Bạn sẽ thấy làm mới trang từ máy chủ. Bây giờ gõ:
window.location = 'http://minimal-github.gilesb.com/raganwald#try_this';
Aha! Không làm mới trang! Kiểu:
window.location = 'http://minimal-github.gilesb.com/raganwald#and_this';
Vẫn không làm mới. Sử dụng nút quay lại để xem các URL này có trong lịch sử trình duyệt. Trình duyệt thông báo rằng chúng tôi đang ở trên cùng một trang nhưng chỉ thay đổi neo, vì vậy nó không tải lại. Nhờ hành vi này, chúng tôi có thể có một ứng dụng Javascript duy nhất xuất hiện trên trình duyệt trên một 'trang' nhưng có nhiều phần có thể đánh dấu được, tôn trọng nút quay lại. Ứng dụng phải thay đổi neo khi người dùng nhập các 'trạng thái' khác nhau và tương tự nếu người dùng sử dụng nút quay lại hoặc dấu trang hoặc liên kết để tải ứng dụng có neo, ứng dụng phải khôi phục trạng thái thích hợp.
Vậy là bạn đã có nó: Các neo cung cấp cho các lập trình viên Javascript một cơ chế để tạo các ứng dụng thân thiện với dấu trang, có thể lập chỉ mục và có thể quay lại. Kỹ thuật này có tên: Đó là Giao diện trang đơn .
ps Có một lợi ích thứ tư cho kỹ thuật này: Tải nội dung trang thông qua AJAX và sau đó đưa nó vào DOM hiện tại có thể nhanh hơn nhiều so với tải trang mới. Ngoài việc tăng tốc độ, các thủ thuật khác như tải một số phần nhất định trong nền có thể được thực hiện dưới sự kiểm soát của lập trình viên.
pps Với tất cả những điều đó, dấu 'bang' hoặc dấu chấm than là một gợi ý thêm cho trình thu thập dữ liệu web của Google rằng cùng một trang có thể được tải từ máy chủ tại một URL hơi khác. Xem Thu thập thông tin Ajax . Một kỹ thuật khác là làm cho mỗi liên kết trỏ đến một URL có thể truy cập của máy chủ và sau đó sử dụng Javascript không phô trương để thay đổi nó thành SPI với một neo.
Đây là liên kết chính một lần nữa: Tuyên ngôn giao diện trang đơn
shebang
đã ... en.wikipedia.org/wiki/Shebang_%28Unix%29