2010-10-27 26 views
5

Tôi đang cố gắng để kiểm tra xem trình duyệt hỗ trợ onHashChange hay không để ẩn một số mã từ nó nếu không muốn nói, theo cách này:Javascript: onHashchange thử nghiệm

if(window.onhashchange){ 
    ...code... 
} else { 
    ...other code... 
} 

Tôi cố gắng này quá:

if(typeof window.onhashchange === "function"){ 
    alert("Supports"); 
} else { 
    alert("Doesn't Supports"); 
} 

Như đã trình bày trên Quirksmode này nên làm việc nhưng nếu tôi làm một alert ví dụ như trong true state trong Safari hơn cảnh báo tôi, nhưng Safari không hỗ trợ onHashChange: S

Có vấn đề gì với nó? Nếu tôi không đúng cách thì tôi nên kiểm tra nó như thế nào?

Trả lời

1

Có khả năng phiên bản Safari bạn đang sử dụng đã thêm hỗ trợ cho sự kiện onhashchange kể từ thời điểm bài viết Quirksmode đó được viết. Các xét nghiệm vẫn phải hợp lệ; dùng thử trong các trình duyệt khác mà bạn biết không hỗ trợ sự kiện.

Chỉnh sửa: ngoài ra, bạn nên sử dụng phương pháp được mô tả bởi @CMS thay vào đó, vì sự kiện này sẽ không chứa hàm theo mặc định; do đó cả hai thử nghiệm đó đều thất bại.

6

Được cảnh báo rằng bạn nên sử dụng tính năng phát hiện thay vì suy luận về sự tồn tại (chẳng hạn như "onhashchange" trong cửa sổ).

@xkit giải thích cho tôi một thử nghiệm tính năng tốt để làm việc xung quanh thực tế là mặc dù IE7 không hỗ trợ onhashchange nó vẫn sẽ trả về true cho suy luận sự tồn tại như ("onhashchange" trong cửa sổ) {/ /} khi sử dụng Chế độ tài liệu chuẩn IE7 trong IE8.

Những gì @xkit đề xuất đã đặt cờ (chẳng hạn như var isSet = true;) trong một hàm xử lý cho sự kiện onhashchange. Sau đó thay đổi window.location.hash bằng JavaScript và xem cờ đã được đặt chưa.

1

nếu cảnh báo (window.onhashchange! == undefined) ('Hỗ trợ onhashchange');

Các vấn đề liên quan