Autor | Zpráva | ||
---|---|---|---|
dragon1357 Profil * |
#1 · Zasláno: 6. 7. 2013, 09:54:10
Dobrý den,
Dělám aplikaci v Nedo.js a potřebuji převést relativní odkaz na absolutní. Aplikace funguje tak, že stáhne stránku, v té poté vyhledá odkazy a relativní převede na absolutní. To znamená, že mám v proměnné string s relativním odkazem + mám adresu stránky. Mám tento kód: /* ******************************* */ function rel2abs(base, rellink){ splitedbase = base.split("/"); splitedbase[splitedbase.length-1] = rellink; var result = splitedbase.join("/"); return result; } /* ******************************* */ var base = "http://www.google.cz/this/that"; var rellink = "example.html"; var result = rel2abs(base, rellink); console.log(result); |
||
Str4wberry Profil |
#2 · Zasláno: 6. 7. 2013, 10:46:23
Vytvořit absolutní adresu někdy může jít i například pomocným obrázkem:
var img = new Image(); img.src = "example.html"; console.log(img.src); Tvar adres není záležitost JavaScriptu. |
||
juriad Profil |
#3 · Zasláno: 6. 7. 2013, 11:11:23
dragon1357:
Uvědom si, jak funguje internetová adresa: http://example.com:80/neco/neco-dalsiho/a-jeste-neco#neco-uplne-jineho
Můžeme ji rozdělit na několik částí, podle toho, jak s ní pracuje internetový prohlížeč. Celá část http://example.com:80 říká s jakým serverem a jak se bude komunikovat.
Další část /neco/neco-dalsiho/a-jeste-neco prohlížeč úplně ignoruje, není pro něj zajímavá s jedinou výjimkou.
Pokud se objeví na stránce relativní odkaz, řekněme <a href="nekam">Někam</a> , určí prohlížeč cílovou absolutní cestu následovně: zahodí vše za posledním lomítkem v aktuální adrese a připojí obsah atributu href. Vznikne tedy absolutní adresa /neco/neco-dalsiho/nekam .
Ještě do toho může zasahovat tag <base> uváděný v hlavičce, ale to dnes skoro nikdo nepoužívá.
Poslední část #neco-uplne-jineho má význam jen pro prohlížeč, říká na jakou kotvu má přejí při zobrazení stránky, neodesílá se.
Když se odesílá požadavek na server, složí se následovně: GET absolutni-cesta HTTP/1.1 Host: domena … nepovinné hlavičky, závisí na prohlížeči, jaké pošle … v našem příkladu se po kliknutí na odkaz Někam odešle dotaz: GET /neco/neco-jineho/nekam HTTP/1.1 Host: example.com … nepovinné hlavičky, závisí na prohlížeči, jaké pošle … Je tedy vidět, že lomítka mají v prohlížeči jediný význam, určují jak se bude překládat absolutní cesta; to pravidlo je triviální. Na straně serveru může běžet libovolné zvěrstvo, které může adresy měnit k nepoznání (třeba nahrazovat pomlčky za lomítka, či naopak). Šlo by teoreticky mít třeba i šifrovane adresy nějakým klíčem, na straně serveru by se požadavek před zpracováním dekódoval. To už ale vymýšlím ptákoviny. |
||
Chamurappi Profil |
#4 · Zasláno: 6. 7. 2013, 14:03:53
Reaguji na Str4wberryho:
Použití obrázku způsobí, že se na tu adresu vzápětí pošle i HTTP požadavek, což je zbytečné a možná i nežádoucí. Lepší je vyrobit odkaz a nastavovat/číst href .
Ovšem pokud dragon1357 zmíněným „Nedo.js“ myslí Node.js, tak se pohybuje v úplně jiném prostředí, kde nebude mít při ruce ani Image , ani document.createElement . Patrně ani nebude mít žádnou staticky určenou zdrojovou adresu, ze které by se mohla relativní odvozovat.
|
||
dragon1357 Profil * |
#5 · Zasláno: 6. 7. 2013, 15:51:06
omlouvám se za překlep.
Tak jsem zjistil, že kód co jsem napsal funguje, až na jeden bug dejme tomu, že na http://www.neco.cz je odkaz <a href="page.html"> .
V tom případě, pokud je původní stránka (base) jen http://www.neco.cz , tak funkce vrátí http://www.page.html . Pokud chci aby to fungovalo správně, tak musím jako base stránku mít http://www.neco.cz/index.html .
Nenapadá vás, co s tím? Mě napadlo jen nějak zjistit, jestli je adresa ve tvaru htt://www.domena.tld nebo http://www.domena.tld/neco.html . V prvním případě by se ve funkci přidalo za adresu /neco (jedno jestli to neexistuje a to by se pak použilo jako base...
Myslíte, že je to správně? (ne z hlediska jestli to bude fungovat, ale jestli je to korektní) |
||
juriad Profil |
#6 · Zasláno: 6. 7. 2013, 16:09:21
dragon1357:
Pokud adresa neobsahuje lomítko, tedy je to jen samotná doména, tak ho prostě přidej na konec. Tím to převedeš na případ, který ti funguje, a můžeš zavolat svou funkci. |
||
dragon1357 Profil * |
#7 · Zasláno: 6. 7. 2013, 16:42:45
Ok, děkuji. Nedošlo mi, že vlastně
http://www.domena.tld/ uz je pro moji funkci korektní vstup
|
||
Časová prodleva: 11 let
|
0