Tôi đang sử dụng định tuyến trong Angularjs
cho SPA của mình nhưng tôi phải hỗ trợ IE7 (và IE8 trong chế độ tương thích IE7). Tôi muốn lịch sử trình duyệt vẫn hoạt động. Tôi không quan tâm nếu tôi phải sử dụng một plugin jQuery.Hỗ trợ lịch sử Angularj cho IE6 và IE7
Trả lời
Tôi đã kiểm tra thông qua các nguồn góc sniffer.js, location.js và browser.js để kiểm tra các cơ chế như thế nào lịch sử đang làm việc. Về bản chất, nếu trình duyệt hỗ trợ lịch sử (tức là $sniffer.history
là đúng) thì api lịch sử được sử dụng, nếu không nó chỉ đơn giản là ghi vào location.href
(hoặc locaiton.replace(url)
). Hãy xem $browser.url(url, replace)
trong browser.js, dòng 149 để biết chi tiết.
Vì vậy, nếu góc chỉ là viết thư cho location
thì một plugin jquery như Ben Alman 's BBQ sẽ nhận sự kiện này vì nó đang bỏ phiếu cho các thay đổi đối với vị trí.hash. Tôi đã có thành công làm việc này trong IE8 (trong chế độ IE7) bằng cách đơn giản bao gồm Ben hashchange plugin (một tập hợp con của BBQ) và sau đó là một tối thiểu lửa sự kiện và sự kiện nghe:
$(function() {
$(window).hashchange(function() {
// don't delete this empty handler or ie6/7 history won't work.
});
// call hashchange on first load
$(window).hashchange();
});
LƯU Ý: jQuery hashchange (và BBQ) được sử dụng không được chấp nhận $.browser.msie
tại số dòng 300 để thay vì sử dụng (document.documentMode != undefined)
như được đề xuất trong các nhận xét cho bài đăng trên blog của Ben.
90 được gọi. Họ muốn trở lại của họ. –
@DanKanze - Thật đáng buồn .. nơi tôi làm việc ở đó là một hệ thống nội bộ đắm mình với IE7 mà họ không thể nâng cấp ngoài IE8 với chế độ tương thích. –
Có, họ có thể. Họ có thể sử dụng IE 7/8 cho ứng dụng cũ và Chrome hoặc Firefox cho mọi thứ khác. Trừ khi họ đang uống Kool-Aid của Microsoft. Các ứng dụng cũ như thế này là lý do duy nhất để sử dụng IE. Không bao giờ. – iconoclast