Popup accessibili? Facile a farsi con WindowedLinks

Lo script non deve alterare il funzionamento degli script preesistenti su eventuali links quindi non deve considerarli.

Per garantire ciò la funzione alteraLinks() dovrà essere costruita in un modo preciso. La sua implementazione è la seguente:

wiLi.alterLinks = function(){
  var links = window.document.getElementsByTagName('a');
  for(var i = 0; i<links.length; i++){
    if( links[i].href != null &amp;&amp; links[i].onclick == null){
      var escludi = false;
      for(var j = 0; j < wiLi.noNewWindowsURL.length; j++){
        var escluso = wiLi.noNewWindowsURL[j];
        if(links[i].href.substr(0, escluso.length) == escluso){
          escludi = true;
          break;
        }
      }
      if(!escludi){
        links[i].onclick = function (){
          return wiLi.openLink(this.href);
        };
        if(wiLi.className!=''){
          if(links[i].className!='') links[i].className += ' ';
          links[i].className += wiLi.className;
        }
      }
    }
  }
}

Spieghiamone il funzionamento.

Dopo aver ottenuto tutti i tags di tipo a (nella variabile links) li cicliamo e prendiamo in considerazione solo quegli elementi il cui attributo href sia specificato (quindi escludiamo le ancore) ed il cui evento onclick non sia specificato.

A quel punto verifichiamo se quello specifico link è presente nell’elenco dei siti da aprire sempre nella stessa finestra (per esempio html.it potrebbe per i suoi domini di terzo livello specificare l’apertura nella stessa finestra, mentre per link esterni promuovere l’apertura in finestre esterne).

Se il link non è da escludere, allora sarà soggetto all’apertura in una nuova finestra (a discrezione dell’utente) per ciascun click che verrà eseguito su di esso.

L’opzione di aprire i link in un’altra finestra deve essere demandata al navigatore del sito.
Proprio per questo motivo ci sarà una variabile booleana, windowedLinks.apriNuovaFinestra che garantirà l’opzionalità della cosa e l’operazione di apertura del link sarà demandato da una funzione:

wiLi.openLink = function(url){
  if(wiLi.openNewWindow){
    window.open(url);
    return false;
  }
  return true;
}

Questa funzione come potrete notare restituisce true o false inversamente allo stato della variabile apriNuovaFinestra.

Il motivo di ciò è nel fatto che questa funzione è richiamata dall’evento click dei link e quindi il link non dovrà far nulla se il link viene aperto in un’altra finestra, altrimenti è il tag che comanderà.


Pubblicato

in

,

da

%d blogger hanno fatto clic su Mi Piace per questo: