【问题标题】:How to make CKEditor strikethrough functionality accessible?如何使 CKEditor 删除线功能可访问?
【发布时间】:2014-10-25 04:39:13
【问题描述】:

CKEditor 的默认删除线功能运行良好并且符合逻辑,在带有删除线的文本周围添加一个“s”标签(我也可以让编辑器使用 html5 的“del”标签),但是问题在于辅助NVDA 或 JAWS 等阅读技术在没有特殊设置的情况下不会以任何不同于普通文本的方式阅读此类内容。我要做的是在删除线文本的开头和结尾添加一个跨度标签,向用户表明这一事实:

<p>
    <span style="height: 1px; width: 1px; position: absolute; overflow: hidden; top: -10px;">Start strikethrough. </span>
    <s>Text with strikethrough</s>
    <span style="height: 1px; width: 1px; position: absolute; overflow: hidden; top: -10px;">End strikethrough. </span>
</p>

正如您在此代码中看到的,跨度在页面中不可见,但阅读器将遵循 dom 顺序,因此用户将收到删除线的提醒。 我知道您可以构建一个插件来插入任何 html,但我必须以与基本样式按钮相同的方式工作,并具有切换功能:

  • 简单的部分:如果在内容中有选择并且按下了按钮,我们必须删除内容。这个更容易,因为我们可以获取选定的 html 并用我想要的内容包围它。
  • 更难的部分:如果没有选择并且按下按钮,那么接下来编写的每个文本都必须有删除线。

经过大量研究和分析“真正的”插件是如何制作的,我得出了这样的结论:

CKEDITOR.plugins.add( 'customStrike', {
    icons: 'customStrike',
    init: function( editor ) {
        var style = new CKEDITOR.style( { element: 's' } );

        editor.attachStyleStateChange( style, function (state) {
            !editor.readOnly && editor.getCommand( 'customStrike').setState(state);
        } );

        editor.addCommand( 'customStrike', new CKEDITOR.styleCommand( style ) );

        if ( editor.ui.addButton ) {
            editor.ui.addButton( 'CustomStrike', {
                label: 'Strike Through',
                command: 'customStrike',
                toolbar: 'custom'
            } );
        }
    }
});

这与真正的插件完全一样,我试图解决这个代码,但据我所知,样式定义中的元素属性只接受一个标签,我需要一种使用元素属性嵌套标签的方法来完成这个。

有没有办法解决这个问题?

任何帮助将不胜感激。

【问题讨论】:

    标签: javascript html ckeditor accessibility strikethrough


    【解决方案1】:

    对我来说,您似乎正在尝试解决问题的错误结局。读者的问题是他们阅读内容的方式不同。破坏内容可能会有所帮助(尽管它会破坏编辑),但当读者更新并开始正确阅读内容时就会出现问题。

    无论如何,如果你坚持现在有一些解决方案,那么我有两个建议:

    • 您可以在s/del 标签上设置某些 ARIA 角色或其他属性,这会以某种方式影响读者。
    • 不要破坏编辑器内的内容,因为你会破坏它。例如,如果这是您要修复的部分,您可以在将内容发送给最终用户之前对其进行处理。

    【讨论】:

    • 谢谢@Reinmar,我也考虑过第二个选项,我将探索这如何适合我们的流程。关于第一个,使用 aria 属性,没想到先试了。再次感谢
    猜你喜欢
    • 1970-01-01
    • 2019-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-23
    • 2023-03-22
    • 2019-07-31
    相关资源
    最近更新 更多