Autor Zpráva
Plom
Profil *
Dobrý den, byl bych moc vděčný tomu, kdo by mi upravil následující javaskript.
Standardně funguje tak, že odkazy na stránkách směřující na jiný web otevírá v novém okně.
Potřeboval bych ale, aby skript jednu "cizí" doménu přehlížel - aby se odkazy, tak jako v případě odkazů na "domací" server, otevíraly ve stejném okně prohlížeče.

Asi by se to mělo realizovat pomocí proměnné (která by měla hodnotu názvu webu s výjimkou). Se svými znalostmi to ovšem nejsem schopen zrealiovat, byť jsem se o to ale pokoušel.

function target_blank() {
  if (!document.getElementsByTagName) {
    // pokud neni funkce pro ziskani elementu podle tagu, ukoncit
    return false;
  }
  var anchors = document.getElementsByTagName('a');
  var site = document.location.protocol + '//' + document.location.host;
  var regexp = new RegExp('^' + site);
  for (var i = 0; i < anchors.length; i++) {
    var href = anchors[i].getAttribute('href');
    if (href && href.match(/^http/) && !href.match(regexp)) {
      anchors[i].onclick = function () { return !window.open(this.href); }
    }
  }
  return true;
}

window.onload = target_blank;


Předem moc děkuji, možná se ten upravený skript bude hodit i někomu jinému.
Plom
Profil *
Vážně nikdo nevíte ? :-(

Zkoušel jsem to i takhle:
function target_blank() {
  if (!document.getElementsByTagName) {
    return false;
  }
  var anchors = document.getElementsByTagName('a');
  var site = document.location.protocol + '//' + document.location.host;
  var regexp = new RegExp('^' + site);
  for (var i = 0; i < anchors.length; i++) {
    var href = anchors[i].getAttribute('href');
    if (href && href.match(/^http/) && !href.match(regexp)) {
      anchors[i].onclick = function () { return !window.open(this.href); }
    }
  }
  return true;
}

// nova funkce pro dalsi web, jehoz odkazy se budou otevirat ve stejnem okne

function target_blank2() {
  if (!document.getElementsByTagName) {
    return false;
  }
  var anchors = document.getElementsByTagName('a');
  var dalsiweb = "http://adresa.dalsiho.webu.cz";
  var regexp = new RegExp('^' + dalsiweb);
  for (var i = 0; i < anchors.length; i++) {
    var href = anchors[i].getAttribute('href');
    if (href && href.match(/^http/) && !href.match(regexp)) {
      anchors[i].onclick = function () { return !window.open(this.href); }
    }
  }
  return true;
}

window.onload = target_blank;
window.onload = target_blank2;


... tedy pokus vykonat stejnou funkci tak nejak soubezne s první... problem ale je, ze v poradi druha funkce vzdy "prepise" tu prvni (pokousel jsem se teda prejmenovavat promenne...) - ve vysledku se pak na webu oteviraji do stejneho okna pouze odkazy na druhy (dodatecne pridany web) a jakekoli jine (smerujici i na stejnou domenu na jake je web) do noveho okna...

Nejedná se o nic komečního, to z charakteru mého dotazu je i jistě všem jasné :-) a tak jsem za každou připomínku ( i nestadnadrní řešení) moc vděčný.
Chamurappi
Profil
Reaguji na Ploma:
Změň proměnnou „site“ uvnitř target_blank:
var site = document.location.protocol + '//(' + document.location.host + '|adresa.dalsiho.webu.cz|dalsi.adresa.dalsiho.webu.info)';
Žádnou druhou funkci potom nepotřebuješ.
Plom
Profil *
Moc děkuji, funguje to přesně tak, jak jsem chtěl - dokonce ještě s možností v budoucnu přidávat další výjimky.
Plom
Profil *
Se předem moc omlouvám, že se k tomu vracím, ale sám na to nemohu přijít.
Našel jsem jiný skript (ten původní nefungoval s IE7):

var links,domain,where,d,p;
p = parent.document; d = document;
domain = 'web-na-ktery-skript-neplati.cz';
where = 'page';
function setlinksVar(){
if (where == 'page'){
links = p.getElementsByTagName('a');
}
else if (where == 'module'){
links = d.getElementsByTagName('a');
}
}
function externalLinks(){
for (var l = 0; l < links.length; l++){
if (links[l].href.indexOf(domain) == -1 && links[l].href.indexOf('http://') != -1){
links[l].target = '_blank';
links[l].title += ' - Opens In A New Window';
links[l].style.background = 'url(/images/ext_link.gif) no-repeat right 4px';
links[l].style.padding = '0 14px 0 0';
}
}
}
setTimeout('setlinksVar();', 0);
setTimeout('externalLinks();', 0.5);


kde jsem se snažil použít výše uvedené řešení, které poskytl Chamurappi (fungovalo v předešlém kódu) - v novém kódu, který jsem teď uvedl už ale ne.

domain = document.location.protocol + '//(' + document.location.host + '|adresa.dalsiho.webu.cz|dalsi.adresa.dalsiho.webu.info)';


Samozřejmě, je tam rozdíl v typu uvozovek, ale nemohu na to přijít (jsem už vyzkoušel snad všechny kombinace... Četl návody pro začátečníky js, ale pokaždé mě to svedlo na cestu tvoření polí ap. a z prohlížení jiných skriptů jsem taky nic nevyčetl.


Ještě bych měl dotaz, jestli když by se odkazům kromě targetu přidala css třída s určitým názvem a byl by použit ještě jeden JS (který vykonává funkci ale až na základě nalezení příslušného názvu css třídy v html kódu), zda to funguje tak, že druhý skript ví o tom, že (prvním skriptem) odkazům přidaným target byla přidána i třída.

druhý skript totiž zjišťuje přítomnost třídy takto:
function bindBubbles(e){
lbActions=WSR_getElementsByClassName(document,"a","NÁZEV-HLEDANÉ-TŘÍDY");
for(i=0;i<lbActions.length;i++){
if(window.addEventListener){
lbActions[i].addEventListener("mouseover",attachBubble,false);
lbActions[i].addEventListener("mouseout",detachBubble,false);
}else{
lbActions[i].attachEvent("onmouseover",attachBubble);
lbActions[i].attachEvent("onmouseout",detachBubble);


Jená se o ukázku skriptu (celkové je moc dlouhý) WebSnapr, který vytváří bublinu s náhledem, jak vypadá web na nějž se odkazuje.

Každopádně byl bych moc rád, kdyby mi někdo pomohl s úpravou té proměnné (chci aby skript fungoval pro 2 domeny) a druhý dotaz je jen ze zvědavosti.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0