JAWS没有宣布加载iFrame内容?

时间:2012-09-10 23:17:46

标签: iframe accessibility wai-aria jaws-screen-reader assistive-technology

我正在开发一个使用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;,它根本不会公布该帧的内容。

2 个答案:

答案 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");
    }
};