Autor Zpráva
rx0
Profil *
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
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 *
_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
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 *
_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
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 *
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
rx0:
nebere to jako pole..
Zabudol som na funkciu eval, už som to opravil.
rx0
Profil *
_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
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
_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
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
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();});
Na čo to ten nadbytočný obal okolo?
weroro
Profil
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
weroro:
Pretože sa to inak nespustí.
To sa mi nezdá. Riadok 8 v kóde v [#15] to spúšťa úplne rovnako ako kód v [#16].
weroro
Profil
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
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ť.

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: