创建可访问性友好的 Facebook 共享按钮

Creating Facebook share button that is accessibility friendly

我正在尝试为我的页面创建一个 Facebook 共享按钮,该按钮可通过标签索引和按 Enter 键访问(用于辅助功能)。我创建的许多解决方案都使用 javascript,并且在跳出共享按钮之前不会加载我的脚本。

到目前为止我已经创建了这个按钮。

<a tabindex="0" class="fb-share-button" href="javascript:window.location=%22http://www.facebook.com/sharer.php?u=%22+encodeURIComponent(document.location)+%22&#38;t=%22+encodeURIComponent(document.title)" data-layout="button_count">
       <img src="/sites/all/themes/saralee/images/icon-facebook.png" alt="facebook icon">
</a>

除了我需要在新标签页或 iframe 中打开它之外,这几乎可以提供所需的结果。我无法保持有效 url。 (因为上面的按钮解析了当前的url)。使用 target="_blank" 不起作用。

快速说明 - 最佳选择 是在服务器上构建 URL 并将其作为 HTML 的一部分提供,使用 JavaScript 如果您出于任何原因无法这样做,请选择下面的选项。

除下面 URL 之外的所有其他要点对于使您的分享 'button' 易于访问很重要。

不要在按钮上使用内联函数,而是在单独的 JavaScript 函数中构建 URL,然后将其应用于文档加载。

JS

var URL = "http://www.facebook.com/sharer.php?u=%22+encodeURIComponent(document.location)+%22&#38;t=%22+encodeURIComponent(document.title)";
var elements = document.getElementsByClassName("fb-share-button");
elements[0].setAttribute("href", URL); //using [0] to get first element, would be better to use an ID or simply **build the URL on the server before loading the page** and serve it as part of the HTML.

HTML

<a target="_blank" class="fb-share-button" href="fallback URL In Case Of JS Failure" data-layout="button_count">
       <img src="/sites/all/themes/saralee/images/icon-facebook.png" alt=""/>
       <span class="visually-hidden">Share This Page on Facebook (opens in new window)</span>
</a>

CSS

.visually-hidden { 
    position: absolute !important;
    height: 1px; 
    width: 1px;
    overflow: hidden;
    clip: rect(1px 1px 1px 1px); /* IE6, IE7 */
    clip: rect(1px, 1px, 1px, 1px);
    white-space: nowrap; /* added line */
}

因为您不再使用 target="_blank" 设置 window.location 将按预期工作(window.location 覆盖了 link 的功能)。

另请注意,我删除了 tabindex,因为 link 默认情况下是可聚焦的(因此不需要)。

我还将 alt 描述更改为“”并添加了包含 link 用途的 'visually hidden' <span>

我已经包含了 CSS 通过将 class 应用到一个项目来制作一些东西 'visually-hidden',因为它是您的辅助工具包中的有用工具!

请注意我如何在方括号内指示 link 'opens in a new window' 以使屏幕阅读器了解此 link 的行为。

一个空的 alt 标签用于将图像标记为装饰性的(确保它是空的而不是 null,即 alt="" 不是 alt)。

屏幕阅读器仍然可以访问视觉隐藏的文本,但不会以视觉方式显示。