Tôi đang làm việc trên một dự án nhỏ mà tôi muốn tạo một trang web theo phong cách Ajax. Nội dung được tải bằng số load()
của jQuery. Như một số bạn đã biết, mặt trái của điều này là URL không thay đổi tương ứng với nội dung được hiển thị. Để thực hiện công việc này, bạn có thể sử dụng pushState()
. Vì đây không phải là trình duyệt được hỗ trợ, tôi đã sử dụng trình cắm thêm history.js
.pushState() và popState(): thao tác lịch sử của trình duyệt
Điều này hoạt động khá độc đáo, nhưng vấn đề là các nút quay lại và tiến của tôi không hoạt động như chúng cần và tôi không biết mình đang làm gì sai. URL đang thay đổi chính xác và nội dung cũng vậy, nhưng tiêu đề không thay đổi chút nào. Với tiêu đề tôi có nghĩa là những gì được hiển thị dưới dạng tiêu đề của cửa sổ (hoặc tab) của cửa sổ trình duyệt. I E. <title>
của trang được tải HOẶC thuộc tính tiêu đề của liên kết đề cập đến trang đó (chúng giống nhau). Tôi nghĩ rằng nó đã làm với thực tế là tôi chỉ gọi một phần của trang có tiêu đề tôi cần (tức là bằng cách thêm #content
vào load()
). Tuy nhiên, tôi vẫn muốn tiêu đề của trang đó. Đây là một trường hợp thử nghiệm của những gì tôi có cho đến bây giờ. (Không có sẵn nữa kể từ ngày 28 tháng 12 năm 2013.) tập tin jQuery:
$(document).ready(function() {
var firstLink = $("ul > li:first-child > a");
var menuLink = $("ul > li > a");
var firstLoadedHtml = firstLink.attr("href") + " #content";
$("#sectionContainer").hide().load(firstLoadedHtml).fadeIn("fast");
firstLink.addClass("active");
menuLink.click(function(e) {
history.pushState(null, null, this.href);
e.preventDefault();
e.stopImmediatePropagation();
var CurLink = $(this);
var newLoadedHtml = CurLink.attr("href") + " #content";
var oldSection = $(".contentPage");
$("#sectionContainer").hide().load(newLoadedHtml).fadeIn("fast");
menuLink.removeClass("active");
CurLink.addClass("active");
});
$(window).bind('popstate', function() {
var returnLocation = history.location || document.location;
$('#sectionContainer').load(returnLocation + "#content");
});
});
tôi cũng lưu ý rằng khi đi trở lại trang cơ bản (ví dụ/sectionLoaderTest /) nó trở nên trống rỗng một lúc và chỉ sau một thời gian nội dung của trang đầu tiên được tải. Có cách nào để tối ưu hóa điều này không?
Ngoài ra, tôi đang sử dụng jQuery để thêm lớp đang hoạt động vào liên kết đã được nhấp. Làm thế nào tôi có thể chắc chắn rằng điều này thay đổi cho phù hợp với lịch sử? Để liên kết chính xác được đánh dấu khi người dùng điều hướng trở lại?
Vì vậy, ba câu hỏi là:
- Lấy tên tạm thời khi đi về phía trước và lạc hậu
- Tối ưu hóa thời gian tải của mainpage
- Fix các hoạt động lớp khi đi về phía trước và lạc hậu
Tất cả trợ giúp đều được chào đón!
GHI CHÚ 1: Tôi muốn xây dựng trên history.js và kịch bản của riêng tôi và như vậy giữ hỗ trợ cho < HTML5
trình duyệt. Tôi thích điều này bởi vì 1. Tôi biết điều này phải làm việc, chỉ có một cái gì đó đó là đi sai. 2. Nó sẽ tiết kiệm thời gian nếu tôi có thể xem giải pháp của một người và thực hiện nó trong kịch bản mà tôi đã viết thay vì tìm ra một kịch bản hoàn toàn mới.
LƯU Ý 2: Tiền thưởng sẽ chỉ được trao cho người có thể trả lời tất cả các câu hỏi của tôi (3)!
Bạn vẫn không đúng, xem ví dụ tại đây http://stackoverflow.com/questions/6622449/why-is-history-pushstate-not-supported-in-ie-are-there-some -other-ways-to-ach/9470183 # 9470183 – devote
Nhận xét của bạn không thực sự hữu ích. Tôi không cần phải thực hiện history.js (chưa), tôi chỉ đang cố gắng hiểu những gì pushState đang làm bây giờ. Tôi muốn khắc phục sự cố này. –
Nhận xét của tôi chỉ ra sai lầm của bạn, cách chọn phương pháp xử lý sự kiện.Phương pháp chặn popstate sự kiện, bạn đã đăng không chính xác, loại bỏ nó khỏi phương thức hoạt động khi được nhấp. – devote