[英]aria-live and JAWS
我正試圖讓一個詠嘆調生活區域與JAWS 11和IE8一起正常工作。
使用下面的代碼,我可以讓JAWS在單擊按鈕時宣布新值,但行為不是我所期望的。
<!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>
使用我的JAWS11 / IE8配置,每按一下按鈕,我聽到:
Click number HTML Value (after click) JAWS says ------------ ------------------------- --------- 1 1 "Update button 0" 2 2 "1" 3 3 "2"
問題,我的問題是: 如何讓JAWS公布aria-live區域的當前值,而不是aria-live區域的先前值?
我也對其他屏幕閱讀器如何處理這個功能感興趣。
你的代碼是正確的。 顯然,已經發現了“落后1”。 從鏈接看起來好像使用aria-atomic="true"
可以解決問題。 但是,給定的示例在IE9和Firefox 中可以正常工作。
如果您還沒有偶然發現它們,請查看codetalks和accessibleculture.org上的測試用例 。 需要注意很多微妙的差異。 測試失敗時不要感到驚訝! 在過去一年左右的時間里,我遇到了一些可能對你有幫助的(不合適的)技巧。
方法1: role="alert"
alert
角色應該等同於aria-live="assertive"
,但舊版本的JAWS沒有正確處理它。 查看2011年2月的這些示例 ,其中指出:
如果您希望在IE7或IE8中支持JAWS 10,最好使用role =“alert”和aria-live =“assertive”來加倍警報。 雖然這有點多余,因為根據定義,警報角色將被處理為一個自信的實時區域,這樣做可以讓JAWS 10自動在這兩個瀏覽器中公布更新的警報內容。
Firefox4 +和IE9都不需要這個。 但它會是這樣的:
<div id="statusbar" role="alert" aria-live="assertive">
Contents will be spoken when changed
</div>
方法2:集中強迫黑客攻擊
通過動態創建DOM元素並強制關注它,您可以“欺騙”大多數屏幕閱讀器閱讀內容。 它是hackish,但有效......而且有點是Create和Focus示例的重點 。 簡化,您可以這樣做:
<div id="statusbar" role="alert" tabindex="-1"></div>
$('#statusbar')
.clear()
.append('<div>' + newString + '</div>')
.children().first().focus()
;
僅隱藏/顯示內容實際上在大多數情況下工作得相當好。 但是, VoiceOver的重點在於元素,並且在再次顯示時不會說出其內容。 因此,從DOM中刪除它似乎是目前最簡單的方法。 我不喜歡它,但事情就是這樣。
如果您使用的是JAWS,我認為您還需要配置默認模式; 因為屏幕閱讀器具有“只讀”模式。 這個問題可以通過印刷機解決:
(Insert + z)打開/關閉只讀屏幕閱讀器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.