Técnicas para as WCAG 2.0

Ir para o conteúdo (Pressione a tecla Enter)

-

SCR24: Utilizar a optimização progressiva para abrir novas janelas a pedido do utilizador

Aplicabilidade

HTML 4.01 e XHTML 1.0.

Esta técnica está relacionada com:

Descrição

O objectivo desta técnica é evitar a confusão que pode ser causada pelo aparecimento de novas janelas que não foram solicitadas pelo utilizador. A abertura repentina de novas janelas pode desorientar ou não ser percebida totalmente por alguns utilizadores. Se o tipo de documento não permitir o atributo target (não existe em HTML 4.01 Strict nem em XHTML 1.0 Strict), ou se o programador preferir não o utilizar, as novas janelas podem ser abertas com ECMAScript. O exemplo seguinte demonstra como abrir novas janelas com script: adiciona um processador de eventos a um link (elementoa ) e avisa o utilizador que o conteúdo vai abrir uma nova janela.

Exemplos

Exemplo 1:

Marcação:

O script está incluído no cabeçalho do documento e o link dispõe de um id que pode ser utilizado como hook pelo script.

Código Exemplo:

<script type="text/javascript" src="popup.js"></script>
…
<a href="help.html" id="newwin">Show Help</a

Script:

Código Exemplo:

      
// Use traditional event model whilst support for event registration
// amongst browsers is poor.
window.onload = addHandlers;

function addHandlers()
{
  var objAnchor = document.getElementById('newwin');

  if (objAnchor)
  {
    objAnchor.firstChild.data = objAnchor.firstChild.data + ' (opens in a new window)';
    objAnchor.onclick = function(event){return launchWindow(this, event);}
    // UAAG requires that user agents handle events in a device-independent manner
    // but only some browsers do this, so add keyboard event to be sure
    objAnchor.onkeypress = function(event){return launchWindow(this, event);}
  }
}

function launchWindow(objAnchor, objEvent)
{
  var iKeyCode, bSuccess=false;

  // If the event is from a keyboard, we only want to open the
  // new window if the user requested the link (return or space)
  if (objEvent && objEvent.type == 'keypress')
  {
    if (objEvent.keyCode)
      iKeyCode = objEvent.keyCode;
    else if (objEvent.which)
      iKeyCode = objEvent.which;

    // If not carriage return or space, return true so that the user agent
    // continues to process the action
    if (iKeyCode != 13 && iKeyCode != 32)
      return true;
  }

  bSuccess = window.open(objAnchor.href);

  // If the window did not open, allow the browser to continue the default
  // action of opening in the same window
  if (!bSuccess)
    return true;

  // The window was opened, so stop the browser processing further
  return false;
}

Recursos

Os recursos são indicados apenas a título informativo, não implica que tenham sido aprovados.

Testes

Procedimento

  1. Active cada link no documento para verificar se abre uma nova janela.

  2. Para cada link que abra uma nova janela, verifique se utiliza script para realizar as seguintes tarefas:

    1. indicar se o link abre numa nova janela,

    2. utilizar processadores de eventos independentes do dispositivo, e

    3. permitir que o browser abra o conteúdo na mesma janela se uma nova janela não for aberta.

Resultados Esperados