Autor | Zpráva | ||
---|---|---|---|
peta Profil |
Nevim, kam to presne zaradit, narazil jsem ve FF (mozna i jinde) na takovy zajimavy problem, kdyz jsem experimentoval po case s ajaxem pomoci script tagu.
Neni mi uplne jasne, proc nejde menit src u tagu script, ale tag jde vypsat pomoci document.write. Pripadne, jestli nekde delam chybu? <?php if (isset($_GET['ip'])) { header("content-type: application/x-javascript"); $serverIP=$_SERVER['REMOTE_ADDR']; echo "document.write(\"Your IP address is: <b>" . $serverIP . "</b> all test\")"; } else { //header("content-type: text/html"); ?> Test ip check. <br>* <script type="text/javascript" src="all.php?ip"></script> html - true <br>* <script type="text/javascript" id="bbb" src="bbb"></script> script.src - false <span id='aaa'></span> <script type="text/javascript"> var url, str; url = 'all.php?ip'; str = '<br>* <script src="' + url + '"><\/script>'; document.write(str + ' document.write - true'); document.getElementById('bbb').src = url; document.getElementById('aaa').innerHTML = str + ' span.innerHTML - false'; document.write('<br><a href="' + url + '">' + url + '<\/a>'); </script> <?php } ?> |
||
_es Profil |
peta:
Z uvedeného kódu a popisu nie je celkom jasné, čo má byť „problém“, ani kde nastáva. Prečo posielaš prehliadaču takú divnú HTTP hlavičku pre JS (4.riadok), keď okrem toho by to podľa HTML kódu mal byť typ text/javascript ?
|
||
peta Profil |
_es:
Aha. Ma to delat to, ze jak to vypise hvezdicky, tak vedle se ma objevit ip adresa na kazdem z tech ctyr radku. Ve dvou pripadech se nic neobjevi. On ten script se 2x zavola a 2x nee (zvyraznil jsem to v kodu, o ktere radky se jedna). Ten samy i s tou hlavickou, ktera se ti nelibi. "content-type: application/x-javascript" - to jsem vygoogloval vcera priklad, kde to tak bylo a fungoval mi, tak jsem to neresil. |
||
_es Profil |
#4 · Zasláno: 7. 2. 2013, 08:41:49
peta:
A na adrese "bbb" je čo?
Pomocou vlastnosti innerHTML nejdú pridávať elementy script - to je známe.
|
||
peta Profil |
bbb je tam proto, ze to ve FF bez nej hlasi do konzoly error. Priklad jsem upravil, aby to bylo trosku jasnejsi, co kdy funguje.
<?php if (isset($_GET['ip'])) { // header("content-type: application/x-javascript"); header("content-type: application/javascript"); $serverIP=$_SERVER['REMOTE_ADDR']; // echo "alert(123);"; echo "document.getElementById('uspech').innerHTML += '+';"; $str = "\"Your IP address is: <b>" . $serverIP . "</b> (" . $_GET['ip'] . ") \""; if (in_array($_GET['ip'],array(3))) { $str = "document.getElementById('cc').innerHTML = $str;"; } else { $str = "document.write($str)"; } echo $str; } else { //header("content-type: text/html"); ?> <body> <div id="uspech"></div> Test ip check. <br>* <script src="all.php?ip=1" type="text/javascript"></script> html - true <br>* <script src="x" id="bbb" type="text/javascript"></script> script.src - false, IE9 true <br>* <span id="cc"></span><span id="cccc"><script id="ccc" type="text/javascript"></script></span> script.src DOM, IE8+ - false (funguje innerHTML, ale odmita document.write) <span id='aaa'></span> <script type="text/javascript"> var url, str; url = 'all.php?ip='; str = '<br>* <script src="{url}" type="text/javascript"><\/script>'; document.write(str.replace("{url}",url+5) + ' document.write - true'); document.getElementById('bbb').src = url+2; document.getElementById('aaa').innerHTML = str.replace("{url}",url+4) + ' span.innerHTML - false'; var a, b, c; c = document.getElementById('ccc'); b = document.getElementById('cccc'); a = document.createElement("SCRIPT"); a.setAttribute("type","text/javascript"); a.setAttribute("id","ccc"); a.setAttribute("src",url+3); //Varování: Volání document.write() z asynchronně nahraného externího skriptu bylo ignorováno. //b = document.getElementsByTagName('BODY')[0]; if (a == null) { b.appendChild(a); } else { //c.parentNode.removeChild(c); b.replaceChild(a, c); } //document.write('<br><a href="' + url + '">' + url + '<\/a>'); </script> </body> <?php } ?> |
||
_es Profil |
#6 · Zasláno: 7. 2. 2013, 10:58:53
peta:
Cez innerHTML externý JS skript do dokumentu naozaj nepridáš.
„Varování: Volání document.write() z asynchronně nahraného externího skriptu bylo ignorováno.“ Viď aj Časté potíže, zajímavosti a poučné debaty » Psaní metodou document.write po načtení stránky maže stránku. Čo keby si z toho chaotického kódu ten „problém“ nejako vyextrahoval na jeden či dva riadky kódu? |
||
peta Profil |
_es:
Ale, ten problem je v tom, ze nefunguje vsech 5 pokusu a document.write v tom jednom pokusu hlasi error. kazdy ten pokus se v javascriptu zapisuje jinak. Dobre, ozelme document.write a innerHTML. Pak zbyva jeste document.getElementById('bbb').src = url+2; FF nic, IE funguje
Proc to ve FF nefunguje? A, co kdyz neozelim document.write? Muj script je na konci stranky a jeste se nedokoncil, stranka neni zavrena, ne? Ikdyz, tohle je sporne, on nastavi src, ukonci se a <script> uz pak natahuje kod nezavisle. Tim bych si to vysvetlit dovedl, ale nemam dukazy. Vypis, ktery ten program udela ve FF (localhost://), vypada asi takto (zjistovani IP je jen testovaci php kod, jak uz jsem psal, co jsem si cely priklad zkopiroval nekde z webu a upravil): +++ Test ip check. * Your IP address is: 127.0.0.1 (1) html - true * script.src - false, IE9 true * Your IP address is: 127.0.0.1 (3) script.src DOM, IE8+ - false (funguje innerHTML, ale odmita document.write) * span.innerHTML - false * Your IP address is: 127.0.0.1 (5) document.write - true |
||
_es Profil |
peta:
„A, co kdyz neozelim document.write? Muj script je na konci stranky a jeste se nedokoncil, stranka neni zavrena, ne?“ No ale na rozdiel od skriptu „na pevno“ v HTML kóde je to načítane asynchrónne - čo ak by sa načítal skript až po uzavretí stránky? Zákazom document.write vlastne prehliadač zabraňuje ťažko odhaliteľnej náhodnej chybe. Metóda document.write slúži na vloženie nejakého obsahu do vstupu HTML parsera počas vytvárania celej stránky - teda za koniec už vytvoreného obsahu. Ty sa nejako snažíš cez tú metódu vložiť nejaký obsah doprostred stránky - teda ti to logicky nefunguje. Ak chceš upraviť už vytvorený obsah, použi iné metódy na to určené.
Prečo dávaš skriptom atribúty ako src="bbb" či src="x" ? Asi na tých adresách nie je žiadny obsah a prehliadač musí čakať, až server vráti nejakú chybovú správu.
|
||
peta Profil |
#9 · Zasláno: 8. 2. 2013, 12:22:37
_es: [#5] Protoze mi konzola hlasi chybu. Nemuzes ladit javascript, kdyz mas konzolu plnou chybovych hlaseni. Mam pocit, ze jeden z tech prikladu nefungoval, pokud nebylo src nadefinovane. Naprosto nelogicky hlasil error, ze src neexistuje.
|
||
_es Profil |
#10 · Zasláno: 8. 2. 2013, 13:04:29
peta:
„Protoze mi konzola hlasi chybu.“ Čiže chybu „opravíš“ tak, že ju nahradíš inou chybou... Akú vlastne chybu? V akom prehliadači? Skúšal som v rôznych prehliadačoch <!doctype html><meta charset="utf-8"><script id=x></script> a ani v jednom nevznikla v chybovej konzole v dôsledku toho nejaká chyba.
|
||
Časová prodleva: 4 dny
|
|||
peta Profil |
#11 · Zasláno: 12. 2. 2013, 13:21:37
_es: Tak si nastav vetsi citlivost, treba na warningy. Co ja s tim, ja potrebuji videt vsechno.
|
||
Joker Profil |
#12 · Zasláno: 12. 2. 2013, 13:31:25
|
||
_es Profil |
#13 · Zasláno: 12. 2. 2013, 13:35:41
peta:
„si nastav vetsi citlivost, treba na warningy“ V ktorom konkrétnom prehliadači spôsobí súbor s uvedeným HTML kódom ([#10]), pri nejakej špeciálnej „citlivosti“, nejaký záznam v jeho chybovej konzole? |
||
peta Profil |
#14 · Zasláno: 13. 2. 2013, 14:53:19
_es: Kod v #10 mi nevyhodil zadnou chybu. To jsem psal uz v #9.
|
||
_es Profil |
peta:
„Kod v #10 mi nevyhodil zadnou chybu. To jsem psal uz v #9.“ Nemohol si v #9 vedieť, že ti kód v #10 „nevyhodil“ chybu. V čase snáď cestovať nevieš. „Prečo dávaš skriptom atribúty ako src="bbb" či src="x" ?“ ([#8]) (Iná otázka tam nie je.)
- „Protoze mi konzola hlasi chybu.“„...jeden z tech prikladu nefungoval, pokud nebylo src nadefinovane. Naprosto nelogicky hlasil error, ze src neexistuje.“ (peta [#9]) Takže aká konzola v akom prehliadači ti hlási na neexistujúci atribút src v elemente script nejakú chybu?
|
||
peta Profil |
#16 · Zasláno: 15. 2. 2013, 10:39:11
_es: A jo, to se ptal Joker, ohledne kodu 10 :)
Momentalne mi to nehlasi FF nehlasi. Jenze mezitim, dva dny zpet, jsem udelal update prohlizece. Ale samozrejme to mohlo byt zpusobene i jinou casti kodu, kterou uz jsem smazal. V kazdem pripade je to pro mne nezajimave a offtopic, abych to zpetne zjistoval. |
||
Joker Profil |
#17 · Zasláno: 15. 2. 2013, 11:39:31
peta:
„V kazdem pripade je to pro mne nezajimave a offtopic, abych to zpetne zjistoval.“ Mám za to, že podstatu problému řeší _es [#4] a zbytek diskuse byl o tom, jestli má smysl do elementu <script> dávat nesmyslný src, aby tam byl alespoň nějaký. Čili závěr je, že nemá. |
||
_es Profil |
#18 · Zasláno: 15. 2. 2013, 11:50:06
Joker:
„podstatu problému řeší _es [#4]“ A ešte to, že nemá zmysel v asynchrónne načítanom skripte používať metódu document.write - preto aj Firefox túto metódu v tomto prípade preventívne blokuje.
|
||
Joker Profil |
#19 · Zasláno: 15. 2. 2013, 11:56:17
_es:
To jsem právě myslel. |
||
Časová prodleva: 11 let
|
0