2011-08-02 14 views
12

Tôi đang cố gắng để có được một khu vực aria-sống để làm việc một cách chính xác với JAWS 11 và IE8.aria-live và JAWS

Sử dụng mã bên dưới, tôi có thể yêu cầu JAWS thông báo giá trị mới khi nút được nhấp, nhưng hành vi không phải là những gì tôi mong đợi.

JSFiddle of this example

<!DOCTYPE html> 
<html> 
<head></head> 
<body> 
    <button onclick="document.getElementById('statusbar').innerHTML = parseInt(document.getElementById('statusbar').innerHTML) + 1">Update</button> 
    <div id="statusbar" aria-live="polite">0</div> 
</body> 
</html> 

Sử dụng JAWS11 tôi/cấu hình IE8, trên mỗi click vào nút tôi nghe:

 
Click number HTML Value (after click) JAWS says 
------------ ------------------------- --------- 
1    1       "Update button 0" 
2    2       "1" 
3    3       "2" 

Vấn đề và câu hỏi của tôi là: làm thế nào để làm cho JAWS công bố giá trị hiện tại của vùng aria-live, thay vì giá trị trước đó của vùng aria-live?

Tôi cũng sẽ quan tâm đến cách trình đọc màn hình khác sẽ xử lý chức năng này.

+0

Vấn đề tương tự dường như không xảy ra trong [này video giới thiệu aria-live] (http://www.youtube.com/watch?v=9nZnTdSAkH0#t=3m8s) - có lẽ đó là một cái gì đó để làm với thiết lập cụ thể của tôi? –

Trả lời

12

Mã của bạn là chính xác. Rõ ràng, "phía sau 1" là discovered. Từ liên kết, có vẻ như việc sử dụng aria-atomic="true" có thể khắc phục được sự cố. Tuy nhiên, ví dụ như được đưa ra hiện hoạt động bình thường trong IE9 và Firefox.

Nếu bạn chưa tình cờ gặp chúng, hãy xem các trường hợp thử nghiệm trên codetalksaccessibleculture.org. Có rất nhiều sự khác biệt tinh tế để nhận thức được. Chỉ cần không ngạc nhiên khi các bài kiểm tra thất bại! Trong năm qua, tôi đã gặp một vài thủ thuật có thể giúp bạn.

Phương pháp 1: role="alert"

Vai trò alertsupposed to be tương đương với aria-live="assertive", nhưng lớn tuổi hơn các phiên bản của JAWS đã không xử lý nó đúng cách. Kiểm tra these examples từ tháng hai năm 2011, trong đó nêu rằng:

Nếu bạn đang tìm kiếm để hỗ trợ JAWS 10 trong IE7 hoặc IE8 ở tất cả, đó là khả năng tốt nhất để tăng gấp đôi lên trên cảnh báo với cả hai vai trò = "alert" và aria -live = "quyết đoán". Mặc dù điều này hơi dư thừa vì theo định nghĩa, vai trò cảnh báo sẽ được xử lý như một vùng sống quyết đoán, làm như vậy cho phép JAWS 10 tự động thông báo nội dung của cảnh báo được cập nhật trong hai trình duyệt đó.

Cả Firefox4 + và IE9 đều không yêu cầu điều này. Nhưng nó sẽ là một cái gì đó như thế này:

<div id="statusbar" role="alert" aria-live="assertive"> 
    Contents will be spoken when changed 
</div> 

Cách 2: tập trung buộc Hack

Bằng cách tự động tạo ra một phần tử DOM và buộc tập trung vào nó, bạn có thể "lừa" hầu hết trình đọc màn hình vào đọc nội dung. Đó là hackish, nhưng hiệu quả ... và phần nào là điểm của ví dụ Create and Focus. Đơn giản hóa, bạn có thể làm điều gì đó như sau:

<div id="statusbar" role="alert" tabindex="-1"></div> 

$('#statusbar') 
    .clear() 
    .append('<div>' + newString + '</div>') 
    .children().first().focus() 
; 

Chỉ ẩn/hiển thị nội dung thay vì thực sự hoạt động khá tốt trong phần lớn thời gian. Tuy nhiên, tập trung của VoiceOver nằm trên phần tử và không nói nội dung của nó khi được hiển thị lại. Do đó, việc loại bỏ nó khỏi DOM có vẻ là phương pháp dễ dàng nhất hiện nay.Tôi không thích nó, nhưng đó là trạng thái của sự vật.

+0

Câu trả lời hay, cảm ơn! Sử dụng aria-live = "polite" và role = "alert" thực sự đọc giá trị hiện tại (thay vì trước đó) với IE8 và JAWS 11, tuy nhiên nó đọc giá trị hiện tại hai lần. Nhận xét có điều kiện cho

+0

@Daniel, cảm ơn bạn đã cập nhật trên IE8. Chúc may mắn! –

0

Nếu bạn đang sử dụng JAWS, tôi nghĩ bạn cũng cần định cấu hình chế độ mặc định; bởi vì trình đọc màn hình có chế độ "chỉ đọc". sự cố này có thể được giải quyết qua báo chí:

(Chèn + z) để bật/tắt trình đọc màn hình chỉ đọc.

http://www.mozilla.org/access/qa/win-webcontent-jaws.html