« 1 2 »
Autor Zpráva
Mufna
Profil
Zdravím Vás. Mám jednu JS funkci pro zacházení s externími odkazy (aby šly do nového okna)
function externalLinks() { 
 if (!document.getElementsByTagName) return; 
 var anchors = document.getElementsByTagName("a"); 
 for (var i=0; i<anchors.length; i++) { 
   var anchor = anchors[i]; 
   if (anchor.getAttribute("href") && anchor.getAttribute("rel") == "external") 
       anchor.target = "_blank"; 
 }
}
window.onload = externalLinks;


Do stránek se to načítá klasicky v hlavičce HTML
<script type="text/javascript" src="/js/external_links.js"></script>


a potřeboval bych do ní nějak zakomponovat druhou funkci s metodou window.open, která by určovala parametry nového okna. Tu druhou funkci - řekněme popup() - si sestavím snad sám, ale jde mi o to provázání s funkci externalLinks(). A ideálně tak, abych nemusel měnit nic v kódu samotného odkazu (takže aby stačil současný parametr (atribut - nevím teď jak se tohle přesně nazývá) u všech odkazů rel="external". Jeden můj odkaz vypadá takto:
echo '<a href="'.$row["url_link"].'" rel="external">';
Chamurappi
Profil
Reaguji na Mufnu:
Tuhle prasárnu používáš místo obyčejného a krásně jednoduchého atributu target="_blank"?

potřeboval bych do ní nějak zakomponovat druhou funkci s metodou window.open, která by určovala parametry nového okna
Všechna otevíraná okna se mají otevírat se stejnými parametry?


Už jsi tady někdy někomu s něčím poradil, nebo jen pokračuješ ve svém „chození pro radu“?
Mufna
Profil
Chamurappi
Tuhle prasárnu používáš místo obyčejného a krásně jednoduchého atributu target="_blank"?
Ano

Všechna otevíraná okna se mají otevírat se stejnými parametry?
Chtěl bych měnit width a height, ostatní mohou být stejné

Už jsi tady někdy někomu s něčím poradil
Ano, a teď to právě hledám, abych Ti dal link. Zatím jsem to ale nenašel.
Mufna
Profil
Chamurappi
Tady jsem snad poradil dobře.
Chamurappi
Profil
Reaguji na Mufnu:
Takže za dva a půl roku, co jsi tu registrovaný, jsi jednou někomu poradil a 129× jsi žádal o radu ostatní. Připadá ti to v naprostém pořádku?
Mufna
Profil
Chamurappi
Připadá ti to v naprostém pořádku?
Ne. Ale nepovažuju se taky za přílišného znalce a kolikrát jsem si už rozmýšlel někde poradit, ale nakonec jsem neporadil, a to ne proto že bych nechtěl, ale proto, že jsem prostě nevěděl jestli jsem schopen poradit dobře. A o blbé rady tady asi nikdo moc nestojí.

EDIT - Pokud narazím na žádost o radu, kde jsem si téměř jistý, že můžu poradit dobře, tak poradím. Spousta otázek ale bohužel míří do sfér, kterým prostě nerozumím natolik, abych někomu něco radil.
Chamurappi
Profil
Reaguji na Mufnu:
nepovažuju se taky za přílišného znalce
1) Znalcem se člověk stává i tak, že dává špatné rady a je ostatními opravován. Tahle diskuse je továrna na znalce.
2) Řada zde kladených otázek je tak jednoduchá, že člověk nemusí být znalec, aby znal odpověď.
3) V některých kategoriích pomůže i rada úplného lajka, třeba u Názorů na stránku.

A o blbé rady tady asi nikdo moc nestojí.
S touhle výmluvou jsem počítal, proto jsem ti předvčírem odpovídal ve věci, které vůbec nerozumím a se kterou mám méně zkušeností než ty. Opravdu tě štvaly mé nepříliš fundované odpovědi? Byl bys radši, kdyby ti neodpovídal nikdo?
Mufna
Profil
Chamurappi
Řada zde kladených otázek je tak jednoduchá, že člověk nemusí být znalec, aby znal odpověď.
Věřím, ale když jsem sem někdy během posledního půl roku zašel proto, abych sám někomu poradil, tak tu zrovna nějaké "vhodné" otázky nebyly. Pokud Ti tohle připadá jako výmluva, bohužel s tím asi nic neudělám.

3) V některých kategoriích pomůže i rada úplného lajka, třeba u Názorů na stránku.
OK, máš pravdu.

„A o blbé rady tady asi nikdo moc nestojí.“
S touhle výmluvou jsem počítal
Když to považuješ za výmluvu, nemohu s tím nic dělat.

Opravdu tě štvaly mé nepříliš fundované odpovědi?
Ne

Byl bys radši, kdyby ti neodpovídal nikdo?
Vždy bych byl radši, kdyby mi ta odpověď pokud možno pomohla
Nox
Profil
Mufna
A co místo manuálního relu se podívat, kam ukazuje href a podle toho určit, jestli je to externí či ne (tedy ne jen zda je cesta zadaná absolutně, protože absolutní může také vést na aktuální stránku).

Když už tedy se dostaneš k tomu, že skript zná všechny externí odkazy, tak spolu s blankem ještě můžeš přidat navázání události window.open. Nevím ale přesně jak to zapsat, aby se zároveň vrátila hodnota funkce ("return !funkce()"), aby se nespustil odkaz spolu s tím, a také jak to zapsat bez závorky (jelikož jsem se tu nedávno dozvěděl, že přiřazení funkce s uvedení závorek má jiný význam (hádám že vrácení návratové hodnoty místo ukazatele na funkci)), aby se jí daly předat parametry...leda by v ní byl přístupný objekt this, ale to bych nerad hádal

To aby se všechny externí odkazy otvírali v novém okně speciálních rozměrů po mě také jeden zákazník chtěl, jelikož na to sám byl zvyklý z práce, ale to je dost zvláštní důvod a obecně mi to přijde jako docela špatná věc. Je to ale (asi) tvůj web, tak si to rozhodni sám
Mufna
Profil
Nox
Tys ten skript smazal ? Zatím mi pomohlo to přidání
anchor.target = "_blank";
anchor.onclick = openExternal;


V tuto chvíli to má jedinou vadu na kráse, a to že se mi zatím do toho okna nenačte příslušné URL. Samotné nové okno ale funguje bezvadně tak, jsk jsem chtěl. A ještě se chci podívat na zoubek tomu variabilnímu width a height nového okna, zatím to mám definovaný v openExternal() natvrdo.
Chamurappi
Profil
Reaguji na Noxe:
Nevím ale přesně jak to zapsat, aby se zároveň vrátila hodnota funkce
Je zapotřebí zabalit volání do další funkce. Pojmenované nebo anonymní. Anonymní může vypadat takhle:
něco.onclick = function()
{
  return !nějakáJináFunkce(sParametry);
};

jelikož jsem se tu nedávno dozvěděl, že přiřazení funkce s uvedení závorek má jiný význam (hádám že vrácení návratové hodnoty místo ukazatele na funkci)
něco.onclick = nějakáFunkce;    // — přiřazuješ celou funkci (při kliknutí si prohlížeč jakoby zavolá něco.onclick())
něco.onclick = nějakáFunkce();  // — přiřazuješ výsledek té funkce (zavolá se hned a to, co vrátí, se dá do onclicku)

leda by v ní byl přístupný objekt this
Funkce přiřazená do onclicku uvidí v „this“ element, ke kterému je ten onclick přiřazen. Takže na odkazu bude v this.href cílová adresa.
Mufna
Profil
Tak zatím to mám všechno takhle a vypadá to, že to funguje (i když úplně dopodrobna tu funkčnost neznám - viz. co píše Chamurappi "přiřazování celé funkce" vs. "přiřazování výsledku funkce" - tomuhle zatím nerozumím, resp. slovům rozumím, ale jak bude ta která konstrukce fungovat, to už nevím). Ještě mi tam ale chybí ošetřit šířku a výšku okna podle vnitřního obsahu (URL).
function externalLinks() { 

 if (!document.getElementsByTagName) return; 
 var anchors = document.getElementsByTagName("a"); 
 for (var i=0; i<anchors.length; i++) { 
   var anchor = anchors[i]; 
   if (anchor.getAttribute("href") && anchor.getAttribute("rel") == "external") 
       anchor.target = "_blank";
       anchor.onclick = openExternal;
 }

}

window.onload = externalLinks;


function openExternal(url) {

 var width  = 300;
 var height = 200;
 var left   = (screen.width  - width)/2;
 var top    = (screen.height - height)/2;
 var params = 'width='+width+', height='+height;
 params += ', top='+top+', left='+left;
 params += ', directories=no';
 params += ', location=no';
 params += ', menubar=no';
 params += ', resizable=no';
 params += ', scrollbars=no';
 params += ', status=no';
 params += ', toolbar=no';

 newwin=window.open(this.href,'windowname5', params);

 if (window.focus) {newwin.focus()}
 return false;

}
Mufna
Profil
Chamurappi
Tak jsem se trochu uvolnil od toho, že mám něco hotový, a můžu se taky zabývat tím co píšeš o "přiřazování celé funkce" vs. "přiřazování výsledku funkce" (to zas budou bezesný noci)
Mufna
Profil
Tak teď jsem zjistil, že ta moje "základní" konstrukce" skriptu způsobí, že do změněného nového okna jdou úplně všechny odkazy, i ty, co nemají nastaveno rel="external". No asi to bude tímhle

newwin=window.open(this.href,'windowname5', params);
Mufna
Profil
Tak si s tím hraju a pořád to má nějaký mouchy. Dobral jsem se k tomuto skriptu (ale moc mi to nefunguje):
function externalLinks() { 

 if (!document.getElementsByTagName) return; 
 var anchors = document.getElementsByTagName("a"); 
 for (var i=0; i<anchors.length; i++)
 { 
    var anchor = anchors[i]; 
    if (anchor.getAttribute("href") && anchor.getAttribute("rel") == "external") 
        anchor.target = "_blank";
        anchor.onclick = function()
        {
          return !openExternalLinks();
        }
    else
    { 
        if (anchor.getAttribute("href") && anchor.getAttribute("rel") != "external")
        anchor.onclick = "";
        anchor.target = "_self";
    }
 }

}

openExternalLinks() {
  tahle funkce mě teď netrápí, ta je jakž takž OK
}


Možná to má jen špatnou syntaxi, nevím. Můžete se na to někdo podívat ?
Mufna
Profil
Tak jsem si nakonec sestrojil toto (na proměnlivý width a height jsem se zatím vykašlal), a taky jsem se vykašlal na validitu a použil přímo v kódu target=_blank. Mám tam jednu mouchu: IE a FF vždy při kliknutí na odkaz z hlavní stránky přenesou nové okno do popředí, ale Opera a Chrome ne. Nevíte někdo, co se stím dá udělat ?
function openLinks() { 

 if (!document.getElementsByTagName) return; 
 var anchors = document.getElementsByTagName("a"); 
 for (var i=0; i<anchors.length; i++) { 
   var anchor = anchors[i]; 
   if (anchor.getAttribute("href") && anchor.getAttribute("rel") == "external")
       {
        anchor.onclick = function externalLinks()
        { 
          var width  = 780;
          var height = 350;
          var left   = (screen.width  - width)/2;
          var top    = (screen.height - height)/2;
          var params = 'width='+width+', height='+height;
          params += ', top='+top+', left='+left;
          params += ', directories=no';
          params += ', location=no';
          params += ', menubar=no';
          params += ', resizable=yes';
          params += ', scrollbars=no';
          params += ', status=no';
          params += ', toolbar=no';

          newwin=window.open(this.href,'_refwin', params);

          if (window.focus) {newwin.focus()}
          return false;
       }
      }
 }

}

window.onload = openLinks;
Mufna
Profil
Tak už jsem to vyřešil
Chamurappi
Profil
Reaguji na Mufnu:
taky jsem se vykašlal na validitu a použil přímo v kódu target=_blank
Ten je validní podle všech normálních DTD.

Tak už jsem to vyřešil
Jak? V čem byl problém?
joe
Profil
OT

Chamurappi
Diskuzní fórum je snad od toho, aby se diskutovalo. Ti, kteří nejsou tak zkušení, žádají právě ty zkušenější, aby jim poradili. Nevím proč, když někdo má nálepku „Moderátor“ se může povyšovat nad ostatními uživateli. Ve své oblasti se vyznáš, dal jsi plno rad (a za to jsme ti všichni vděční, protože bysme se v tom patlali třeba ještě dneska), ale někdy prostě ulítneš a ani si to (zřejmě) neuvědomíš. Máš snad nějaký problém s tím, pokud Mufna něco neví, a tak se obrátí na diskuzi? Z tvých argumentů vyplývá, že se nad ním povyšuješ, kolik jsi rozdal rad. Někdy tvé chování tady fakt nechápu.

Mufna
Nenech se :-) A jinak, používej target="_blank", i kdyby ti validátor psal, že je to nevalidní. No a? Neznamená ještě, že co není validní podle validátoru, to nemůže být použito. Ne všechny pravidla se musí dodržovat.
Mufna
Profil
Chamurappi
IE a FF vždy při kliknutí na odkaz z hlavní stránky přenesou nové okno do popředí, ale Opera a Chrome ne
To byl problém.

Odstranil jsem ho tak, že jsem nejdřív ještě před vnitřní funkcí (možná to šlo i uvnitř ní, asi to je jedno) hned nadeklaroval proměnnou newwin a na začátku funkce testnul, zda je již nějaké okno otevřené. A pokud ano, tak ho zavřu a vždy otvírám nové. V mém případě to takto vyhovuje. Všude kde jsem to testoval (IE6,7, FF 2+, Opera 9+, Chrome a ještě i pár dalších) to funguje bez problému.
function openLinks() {

 if (!document.getElementsByTagName) return;
 var anchors = document.getElementsByTagName("a");
 for (var i=0; i<anchors.length; i++) {
   var anchor = anchors[i];
   if (anchor.getAttribute("href") && anchor.getAttribute("rel") == "external")
       {
        var newwin;
        anchor.onclick = function externalLinks(width,height)
        {
          if (newwin && !newwin.closed) {newwin.close()}
//       var width  = document.images[0].width;  A tohle bych chtěl nějak navázat na odkazovaný dokument (stránku)
//       var width  = document.images[0].hight;  A tohle taky - zatím tam je jen pokusně image[]
          var left   = (screen.width  - width)/2;
          var top    = (screen.height - height)/2;
          var params = 'width='+width+', height='+height;
          params += ', top='+top+', left='+left;
          params += ', directories=no';
          params += ', location=no';
          params += ', menubar=no';
          params += ', resizable=yes';
          params += ', scrollbars=no';
          params += ', status=no';
          params += ', toolbar=no';

          newwin=window.open(this.href,'win', params);

          if (window.focus) {newwin.focus()}
          return false;
        }
      }
 }

}

window.onload = openLinks;
Mufna
Profil
Musel jsem ten předchozí příspěvek s kódem několikrát změnit, omlouvám se, byl v tom chaos
Mufna
Profil
joe
Ne všechny pravidla se musí dodržovat

Souhlasím. Zvlášť když to pomůže v konkrétní situaci a nemusí člověk několik dní přemýšlet, jak něco udělat tak jak to potřebuje, a přitom dodržet 100% validitu. Samozřejmě jak u čeho.

EDIT - a zrovna tady mi přidání target="_blank" úplně klasicky přímo do kódu (ne do JS) i dost pomohlo a usnadnilo ostatní náležitosti

Jinak díky za zastání proti Chamurappimu, no tentokrát mi to nepřijde nijak horké. Hlavně když si ten svůj skriptík dopatlám k obrazu svému, třeba i z valné části sám (u tohoto to skoro tak vidím), pak budu spokojen.
Chamurappi
Profil
Reaguji na joa:
Vlákno odkázané v příspěvku [#2] jsi četl?
Nerozumím, proč mluvíš o mém moderování, já tu nijak nezasáhl jako moderátor, ani jsem se k tomu nechystal. Ani jsem neporovnával svůj celkový přínos s Mufnovým. Hodnotil jsem jen samotný Mufnův (skoro nulový) přínos, stejně jako řada lidí přede mnou.


Reaguji na Mufnu:
a zrovna tady mi přidání target="_blank" úplně klasicky přímo do kódu (ne do JS) i dost pomohlo
A zrovna tady nemá smysl uvažovat o validitě, poněvadž target="_blank" opravdu může být validní, pokud autor stránky chce.
Mufna
Profil
Chamurappi
Ten (pozn: target=_blank) je validní podle všech normálních DTD

Nevím co to je "normální" DTD. Použil jsem XHTML Strict (samozřejmě s content-type="text/html" - jak jinak :-) ), ale nechce se mi to momentálně předělávat.
Mufna
Profil
Chamurappi
target="_blank" opravdu může být validní, pokud autor stránky chce

Vím, ale (viz. můj příspěvek výše)
Chamurappi
Profil
Reaguji na Mufnu:
Normální je Transitional.
Nekouskuj prosím své odpovědi do vícero příspěvků. (— Tohle už říkám jako moderátor.)
Mufna
Profil
Chamurappi
Nekouskuj prosím své odpovědi do vícero příspěvků

Když jsem psal první, neviděl jsem ještě Tvoji další reakci
Mufna
Profil
Dají se nějak zjistit a předat do JS vlastnosti width a height z celé HTML stránky, řekněme když budou uvedeny v <body> nebo třeba v inline stylopisu ? Do nového okna otvírám vždy stránku "index.php", která má strukturu:

<?php
function write_html() {
?>
následuje kompletní HTML včetně DOCTYPE, hlaviček atd.
<?php
return;
}
write_html();
?>

Potřebuju používat koncovku .php, jinak bych použil .html a zrušil PHP konstrukci
joe
Profil
Chamurappi
Regoval jsem spíš na toto „Takže za dva a půl roku, co jsi tu registrovaný, jsi jednou někomu poradil a 129× jsi žádal o radu ostatní. Připadá ti to v naprostém pořádku?“
Diskusi jsem četl a musím přiznat, že na nějakých fórech si taky sám neodpovídám na odpověď? Proč? Neptal jsem se sám sebe a když mi nikdo není schopný dát nějakou smysluplnou odpověď, tak se mi tam ani přispívat nechce. Nemluvím tady o tomhle fóru, ale jinak myslím, že je zcela na uživateli samotném, jestli poskytne své řešení, jak si s tím poradil. A pokud ho někdo požádá o řešení, pak už je na něm, jestli ho poskytne nebo ne, já osobně tady (v tomto fóru) bych ho poskytl, s tímhle fórem nemám žádný problém a jsem rád, když někomu můžu v něčem poradit a taky když se mi dostane nějaké dobré odpovědi, viz třeba tvé příspěvky na můj prasácký js .-)
Chamurappi
Profil
Reaguji na joa:
Reagoval jsem spíš na toto
Důležitý je kontext.

pak už je na něm, jestli ho poskytne nebo ne
Pokud napíše, že ho neposkytne, protože za to na rozdíl od lidí, kteří mu jinak ochotně odpovídají, není placen, tak si ho řada odpovídajících strčí na černou listinu. A pak už je samozřejmě na nich, jestli mu ještě někdy budou radit, nebo ne. Tuším, že se tomu říká „altruistické trestání“.
Mufnovi jsem jen připomněl, proč mu tady nikdo nechce s ničím pomáhat, i když se někdy ptá na triviální věci (jako třeba tady).

na můj prasácký js .-)
Upadlo ti oko? Tak to mě mrzí :-(
« 1 2 »

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