Autor | Zpráva | ||
---|---|---|---|
rx0 Profil * |
#1 · Zasláno: 15. 3. 2012, 10:50:52
Zdravím,
prosím o radu. Ajaxem po onkeyup-u do divu id="js"></div> načítám HTML ... k tomu html potřebuji vkládat javascript - ten se však nespustí, když je volaný ajaxem. Tzn. např. do toho divu s id js se načítá ajaxem: Registrace nebyla úspěšná. <script>alert('abc');</script> (pro pochopení principu..) Díky za rady, jak udělat, aby ten script "ožil". |
||
_es Profil |
#2 · Zasláno: 15. 3. 2012, 11:22:57
rx0:
„načítám HTML ... k tomu html potřebuji vkládat javascript“ Nepotrebuješ, sprav to inak. Problém je asi ten, že nastavenie vlastnosti innerHTML nespracúva značky <script> .
|
||
rx0 Profil * |
#3 · Zasláno: 15. 3. 2012, 11:33:32
_es:
to bude přesně ono! Jde mi hlavně o ten javascript, innerHTML již oželím. A prosím - nyní jsem to měl takto: document.getElementById(he).innerHTML = httpRequest.responseText; jak to přepsat, aby se javascript provedl? Děkuji. |
||
_es Profil |
#4 · Zasláno: 15. 3. 2012, 11:42:27
rx0:
No však s vrátenými dátami môžeš pracovať ľubovoľne, tak si zvoľ ich formát a ich spracovanie tak, aby bol výsledok taký, aký chceš, teda nejaká hláška alert a niečo vypísané do nejakého elementu <div> .
„Ajaxem po onkeyup-u do divu id="js"></div> načítám HTML“ Myslíš, že to je dobrý nápad? Čo ak niekto zapíše 100 znakov? To sa odošle aj prijme 100 http požiadaviek a nie je zaručené, že prehliadač spracuje poslednú odoslanú požiadavku ako poslednú. |
||
rx0 Profil * |
#5 · Zasláno: 15. 3. 2012, 11:49:34
_es:
Byl to jako příklad.. samozřejmě máš pravdu. Mě jde o to, že ten javascript třeba by měl udělat (resp. ten skript vrátit): alert('abc'); document.getElementById('x').value='yyy'; ... tzn. několikero javascriptových úkonů. A problém je, že stávající zápis (viz výše s innerHTML) neumím přepsat tak, aby pouze vyvolal provedení všech těch JS na stránce.. |
||
weroro Profil |
#6 · Zasláno: 15. 3. 2012, 12:04:28
Poslednú dobu sa zvyknem hrať s UserScriptami (GreaseMonkey script) a toto je tam na dennom poriadku. Nepoužívam síce ajax ale tiež vlastne načítavam JS pomocou innerHTML do už rozbehnutej stránky. Potom som nechtiac prišiel na to, že ak je to JS vo formáte Base64 tak sa spustí. Možno ti to pomôže.
|
||
_es Profil |
rx0:
Napríklad, server vráti text: ["správa1","správa2"]
A ty to spracuješ - úprava kódu v [#3]: var p=eval(httpRequest.responseText); document.getElementById(he).innerHTML = p[0]; alert(p[2]); weroro: „tiež vlastne načítavam JS pomocou innerHTML do už rozbehnutej stránky“ Prečo? Prečo nepridávaš JS do stránky nejako - „normálne“? |
||
rx0 Profil * |
#8 · Zasláno: 15. 3. 2012, 12:19:29
díky oběma.
_es: Dobrý nápad. Akorát - server vrací jak píšeš (plain text),ale v p[0] je "[" .. v p[2] je "s" atd., nebere to jako pole.. ještě jednou dík. |
||
_es Profil |
#9 · Zasláno: 15. 3. 2012, 12:25:44
rx0:
„nebere to jako pole..“ Zabudol som na funkciu eval , už som to opravil.
|
||
rx0 Profil * |
#10 · Zasláno: 15. 3. 2012, 12:28:25
_es:
jo, před chvíli jsem to vygůglil:) Každopádně velké díky za pomoc! |
||
weroro Profil |
rx0:
„Prečo? Prečo nepridávaš JS do stránky nejako - ‚normálne‘?“ Dá sa pomocou US vložiť JS do stránky, na ktorú iba chodím ako užívateľ a je plná ajaxu a iného JS, normálne? |
||
_es Profil |
#12 · Zasláno: 15. 3. 2012, 14:24:23
weroro:
„Dá sa pomocou US vložiť JS do stránky, na ktorú iba chodím ako užívateľ a je plná ajaxu a iného JS, normálne?“ Nepoužívam to, no normálny spôsob bude snáď taký, že je nejaký kód JS a ten je v kontexte stránky spustený. Na čo objekt.innerHTML="<script>kód</script>"; , keď nejaké rozšírenie prehliadača, ktoré používaš, umožňuje spustiť kód priamo?
|
||
weroro Profil |
#13 · Zasláno: 15. 3. 2012, 14:37:18
_es:
Bez rozšírenia sa dá US spustiť iba v Opere a Chrome, pre FF je tu GreaseMonkey a pre Safari to už ani presne neviem ale je tam určite nejaké rozšírenie. V GM sa dá spustiť script, tak ako píšeš, aj v opere ale potrebuješ na to samostatný widget. US ktoré sa čas od času robia (jeden US robíme viacerí) sú určené nie iba pre nás ale aj pre zvyšok užívateľov a nebudem nikoho nútiť sťahovať niečo keď to ani nepotrebuje a viem zabezpečiť aby to fungovalo aj bez toho. Už to že si niekto "musí" stiahnuť GM do FF vidím ako komplikáciu. Proste stiahnu si JS súbor a potiahnu do okna - hotovo. Nič viac. :) |
||
_es Profil |
#14 · Zasláno: 15. 3. 2012, 14:51:09
weroro:
Nerozumiem ti, píšeš o niečom čo nepoužívam, a/alebo to požívaš nejako nevhodne. K čomu je nutné, či nejako zjednodušuje, s súvislosti s JS, použiť vlastnosť innerHTML? „ale potrebuješ na to samostatný widget.“ Ako to súvisí s innerHTM? „Potom som nechtiac prišiel na to, že ak je to JS vo formáte Base64 tak sa spustí.“ Konkrétne, aká hodnota vlastnosti innerHTML bola nastavená, že prehliadač spracoval značku <script> ?
|
||
weroro Profil |
_es:
„Konkrétne, aká hodnota vlastnosti innerHTML bola nastavená, že prehliadač spracoval značku <script>?“ Priznám sa, že ako tak pozerám do nových verzií scriptov, tak sa skoro všade používa appendChild(), - my Bad. Nebudem tvrdiť, že to 100% ide bez dôkazu, ale dám ruku do ohňa že pred tým ako sme spoznali appendChild() sa tieto veci robili cez innerHTML. Pohľadám niekde v archíve na userscripts org toto je nepodstatné ale iba ukážka s appendChild(): var headID = document.getElementsByTagName("head")[0]; var newScript = document.createElement("script"); newScript.type = "text/javascript"; newScript.charset = "utf-8"; newScript.id = "blokovac"; newScript.src = "data:application/x-javascript;base64,JChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXskKCcjc2tsbyBhLmZvdGthLCAjc2tsbyBwID4gYSwgI3BhcmFwZXQgdWwuem96bmFtID4gbGkgPiBhLmF2YXRhciwgI3BhcmFwZXQgdWwuem96bmFtID4gbGkgPiBhLnByZXp5dmthJykuZGllKCk7fSk7"; headID.appendChild(newScript); _es: „Ako to súvisí s innerHTM?“ To som napísal na margo toho, keď si písal „keď nejaké rozšírenie prehliadača, ktoré používaš, umožňuje spustiť kód priamo“ |
||
_es Profil |
#16 · Zasláno: 15. 3. 2012, 15:23:43
weroro:
„toto je nepodstatné ale iba ukážka s appendChild():“ „newScript.src = "data:application/x-javascript;base64,JChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXskKCcjc2tsbyBhLmZvdGthLCAjc2tsbyBwID4gYSwgI3BhcmFwZXQgdWwuem96bmFtID4gbGkgPiBhLmF2YXRhciwgI3BhcmFwZXQgdWwuem96bmFtID4gbGkgPiBhLnByZXp5dmthJykuZGllKCk7fSk7";“ Na a prečo nie namiesto toho normálne: $(document).ready(function(){$('#sklo a.fotka, #sklo p > a, #parapet ul.zoznam > li > a.avatar, #parapet ul.zoznam > li > a.prezyvka').die();}); |
||
weroro Profil |
#17 · Zasláno: 15. 3. 2012, 15:37:08
Pretože sa to inak nespustí. (Je to na štýlovanie chat miestnosti azet/pokecu). Tam sa to pomocou US (ktorý sa vždy načítava až potom ako je komplet načítaná stránka) vloží tento kód, ktorý zablokuje také otravné okno miniprofilu (to je ale jedno). Čisté jquery tak ako si ho dal ty ale nič neurobí lebo ho treba aj spustiť, a keď je v base64, tak sa spustí (apoň tak to chápem, ja len skladám z vygooglených vecí :) ) a zablokuje ten panel. Bez toho ho ani nehne (keby mám vedomosť ako to dosiahnuť aj inak, tak by sa to tak nerobilo).
|
||
_es Profil |
#18 · Zasláno: 15. 3. 2012, 16:22:41
|
||
weroro Profil |
#19 · Zasláno: 15. 3. 2012, 18:25:11
No do tejto témy to síce nepatrí, ale to sa nepodarilo rozbehať. nech dám do src, čokoľvek okrem base tak sa to nespustí, aspoň nie na v tom US a nie na pokeci. Alebo to robím zle.
|
||
_es Profil |
#20 · Zasláno: 15. 3. 2012, 22:33:50
weroro:
„to sa nepodarilo rozbehať. nech dám do src, čokoľvek okrem base tak sa to nespustí,“ Prečo do src v <script> ? Veď to daj normálne ako kód, čo sa má spustiť.
|
||
Časová prodleva: 12 let
|
0