Otváranie externých odkazov v novom okne po druhé

Takmer presne pred rokom som písal článok o tom, ako otvárať externé odkazy v novom okne pomocou jQuery. Odvtedy som sa odhodlával vymyslieť jednoduchšie riešenie, ale vkuse som to odkladal (to je zlý, zlý prístup). Každopádne to čo som nevymyslel ja, už vymyslel niekto iný a tak Vám dnes ukážem ešte jednoduchšie riešenie.

Tí čo viete po anglicky, si môžete rovno prečítať originálny článok, ktorý napísal scribu.

Tí čo neviete, tak máte smolu ;), ale dám Vám sem aspoň jeho riešenie:

jQuery(document).delegate('a', 'click', function() {
    var root = location.href.replace(location.pathname + location.search + location.hash, '');
 
    if ( !this.href ) return;
 
    if ( 0 != this.href.indexOf(root) ) {
        window.open(this.href);
        return false;
    }
});

Toto riešenie funguje ináč ako to predošlé.

Pri starom riešení sa každému odkazu, ktorým mal v rel atribúte slovo external priradila funkcia, ktorá po kliknutí na odkaz otvorila nové okno s danou adresou.

V riešení od scribu, sa každému odkazu priradí funkcia, ktorá až po kliknutí na odkaz, zistí, či je odkaz externý a podľa toho ho otvorí buď v novom, alebo aktuálnom okne. Lepšie povedané, keď sa nejedná o externý odkaz, tak funckia nespraví nič a odkaz sa automaticky otvorí v aktuálnom okne.

Výhodou druhého riešenia je, že nemusíme odkaz nijak označovať a len pomocou JavaScriptu po kliknutí na odkaz zistíme, či sa jedná o externý odkaz, alebo nie. Nevýhodou je práve to, že to vieme až po kliknutí na odkaz, to znamená, že mu napríklad nevieme priradiť CSS triedu, ktorá by tento externý odkaz nejak označovala…

Každopádne, ak nám ide len o otvorenie externého odkazu v novom okne, tak toto riešenie je ideálne.


Posted

in

by

Comments

Jedna odpoveď na na “Otváranie externých odkazov v novom okne po druhé”

  1. head Avatar

    V kóde bola jedna malá chyba, kvôli ktorej sa odkazy otvárali v aktuálnom okne. Každopádne už je to opravené.

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *