我正在开发一个使用iFrames的网络应用程序(请不要让我使用别的东西,而不是我的决定)。有两个框架,一个导航框架和一个内容框架(自上而下)。
导航框始终保持不变。当用户单击链接,导致内容框架中的内容发生更改时,JAWS不执行任何操作。我希望JAWS做的是宣布新页面的内容(至少是标题)。
我已经查找了WAI-ARIA标签,并且一直在尝试各种JavaScript技巧来控制对元素的关注。 唯一有效的方法正在执行以下操作
<iframe id="contF" aria-atomic="true" aria-live="assertive" frameborder="0" name="content" title="${ca.title}" src="${ca.src}"></iframe>
这将导致JAWS在首次加载时宣布帧的内容(因此之前从未点击过该链接)。如果是#34;访问过的链接&#34;,它根本不会公布该帧的内容。
答案 0 :(得分:0)
我知道你要求不要改变任何东西,但为什么你会选择两个iframes
?多年来我没有处理过这个问题,所以我很模糊。我想说你可以将普通帧链接在一起,而不是iframe。
如果您将target="content"
添加到导航框架中的各个链接,它可能会有效。
由于属性和iframe的性质,原子属性不起作用。原子属性监视DOM更改并在更改时触发。那么到你的
<iframe id="contF" aria-atomic="true" aria-live="assertive" frameborder="0"
name="content" title="${ca.title}" src="${ca.src}"></iframe>
什么都不做,因为这个iframe打开的页面的DOM没有改变。
答案 1 :(得分:0)
我知道这是一篇很老的文章,但是我将针对具有相同问题的人员发布我的解决方案。 在将要加载到iframe的所有页面中放入一个描述div:
<div id="ac_title" style="display:inline-block;position:absolute;top:0;right:0;height:1px;width:1px">Page ZZZ loaded.</div>
以及index.html中的以下代码:
window.frames["content"].onload = function() {
var a = this.contentDocument.getElementById("ac_title");
if (a) {
a.setAttribute("role", "alert");
}
};