Autor | Zpráva | ||
---|---|---|---|
wrestler Profil |
#1 · Zasláno: 17. 10. 2008, 22:49:23
Zdravím.
Nevím, co dělám špatně, ale mám element <script> s atributem id="skript". Primárně je tomuto elementu ještě přiřazen atribut src="nic.js". Ve skriptu nic.js není nic. Podstatné je, že pomocí fce měním atribut src tohoto elementu, a sice následovně: document.getElementById("skript").src = "neco.js"; Pokud zavolám tuto fci po načtení stránky, očekávám, že si prohlížeč načte skript neco.js, ve kterém mám deklarovanou jednu proměnnou. S touto proměnnou pak ještě dále pracuji, resp. chtěl bych pracovat. Nicméně FF vypíše ve své chybové konzoli hlášku, a to že tato proměnná není definována. Dělám někde chybu? Díky za připomínky... |
||
DJ Miky Profil |
#2 · Zasláno: 17. 10. 2008, 23:06:37
Nevím, jak se prohlížeče chovají při změně adresy skriptu, ale nezkoušíš s proměnnou pracovat ještě předtím, než se ten skript opravdu načte? Pokud hned za tím přiřazením adresy máš příkazy pracující s tou proměnnou, je to celkem možné.
|
||
wrestler Profil |
#3 · Zasláno: 17. 10. 2008, 23:36:21 · Upravil/a: wrestler
DJ Miky
Je pravda, že ta proměnná je pole o stovkách prvků... Je nějaký způsob jak vyčkat na načtení skriptu i po načtení stránky a pak teprve vykonat požadovanou akci? |
||
peta Profil |
#4 · Zasláno: 20. 10. 2008, 07:52:18
document.write('<script src="adresa"></script>'); Treba?
nebo innerHTML do neceho ? |
||
wrestler Profil |
#5 · Zasláno: 20. 10. 2008, 14:51:47 · Upravil/a: wrestler
peta
Problém je, že já potřebuji počkat, až se mi externí skript načte. A to v případě, že obsahuje proměnnou jako pole o obsahu několika set prvků, trvá déle, než bych potřeboval. Protože ihned poté, co změním src toho skriptu s tou proměnnou v něm, s touto proměnnou pracuji... Zkoušel jsem hazardérský pokus, a sice nejdříve si proměnnou nadefinoval, pak teprve vložil skript a pak cyklem while(){} zkoušel, jestli už je konečně proměnná načtená, jestli ano, tak se bude teprv pokračovat. Nicméně zkončilo to kolapsem prohlížeče, takže tato možnost padá. Ještě pro představu kód: var promenna = ""; document.getElementById("skript").src = "neco.js" //v neco.js mám proměnnou promenna while(promenna == ""){ //pockame } //a až tady pracuji s proměnnou promenna |
||
peta Profil |
#6 · Zasláno: 21. 10. 2008, 07:55:26
wrestler
Asi neco logicky nechapu. mas soubor externi.js, ktery obsahuje co? var x = [1,2,3,4,...]; Nacitas to takto: <script src=externi.js></script> a pod tim spustis nejaky dalsi script <script>funkce();</script> ktery pracuje s promennou a z nejakeho duvodu nepocka na nacteni externiho scriptu? To se mi nezna. A kdyby tomu tak bylo, tak muzes do externi.js pridat na konec radek funkce(); a nemusis to delat pres 2 tagy script. Tady uz musi pockat na nacteni. Co kdybys z fikci presel ke konkretnimu prikladu, at nemusime stale premyslet, kam jsme zalozili tu kristalovou kouli... |
||
bohyn Profil * |
#7 · Zasláno: 21. 10. 2008, 08:45:44
A co treba namontovat onload udalost na ten script?
function fce1() { document.getElementById("skript").src = "neco.js"; document.getElementById("skript").onload = fce2; } function fce2() { // promena != "" // ... } |
||
wrestler Profil |
#8 · Zasláno: 21. 10. 2008, 17:29:22 · Upravil/a: wrestler
peta
bohyn Obě rady jsem zkusil. Ta bohynova bohužel nefunguje, nicméně žádná chyba se v konzoli neobjevila. Teď ještě záleží na tom, jestli jsem tu petovu pochopil správně... Do jednotlivých skriptů jsem na konec za deklaraci proměnné slova zavolal funkci, která s touhle proměnnou pracuje. Celá aplikace je slovník cizích slov, dokument, který si načítá skripty, je úvodní vyhledávací stránka. Odkaz na úvodní stránku; Odkaz např. na písmeno Z (pro ukázku volání fce) |
||
peta Profil |
#9 · Zasláno: 22. 10. 2008, 10:36:53 · Upravil/a: peta
wrestler
Hm, tak asi uz to chapu, delas, co jsme si myslel, ze asi delas. Jenze u toho JS nemas asi nastavene kesovani, mozna spravny jazyk nebo kodovani. Navic si nechal ve scriptu nactiskript(slozka + prvni + ".js"); hledej(str); Ted mi ten script hlasi na radku 143, ze slova nejsou definovana. for(var i=0; i<slova.length; i++){ V tuto chvili nemam moc casu, ale zkus udelat toto: --- soubor.htm --- <script src=z.js></script> a v z.js na konci misto hledej dej alert(slova); Pokud se alert zobrazi spravne, pak tato cast funguje spravne. Pokud ne, zkusil bych totez bez diakritiky. A pokud se to zobrazi, zkusil bych totez pomoci toho scriptu. Myslim si, ze by to melo fungovat. Nekdy o vikendu nebo pristi tyden bych to zkoukl, presne stejny postup. |
||
wrestler Profil |
#10 · Zasláno: 22. 10. 2008, 18:40:15
Zkusil jsem alert s diakritikou
-> slova is not defined Zkusil jsem alert bez diakritiky -> slova is not defined ještě odkazy, ať nemusíte hledat výše: úvodní stránka písmeno Z |
||
Davex Profil |
#11 · Zasláno: 22. 10. 2008, 19:33:38 · Upravil/a: Davex
Požadovaný soubor s Javascriptem se vůbec nezačne stahovat. Zkus metodu načtení skriptu pomocí funkcí DOM.
|
||
peta Profil |
#12 · Zasláno: 23. 10. 2008, 08:37:28
--- z.js ---
var tmp_slova = "zorzet||hedvabna ci vlnena jemna tkanina"; alert('slova1 = ' + tmp_slova); --- soubor.htm --- <head> <script type="text/javascript" src="nic.js" id="skript"></script> <script type="text/javascript"> var tmp_slova = 'aaa'; var tmp_soubor = ''; alert(1); function hledej(str) { alert(2); str = str.toLowerCase(); if (str.length>1) { alert(3); var soubor = str.substr(0, 1) + '.js'; if (tmp_slova=='aaa' && soubor!=tmp_soubor) { tmp_soubor = soubor; alert('4 ' + soubor); // document.getElementById("skript").src = soubor; // document.body.innerHTML += '<script src="'+soubor+'"><\/script>'; var skriptik = document.createElement('SCRIPT'); skriptik.src = soubor; document.body.appendChild(skriptik); alert('slova2 = ' + tmp_slova); } } } </script> </head> <body> <script type="text/javascript"> hledej('zajic'); </script> </body> Zrejme je treba udelat jeste nejaky realod, spravne nastavit kesovani nebo neco. Lepsi je pridat na konec pres DOM a pres removeChild odstranit. Nechce se mi ted zkoumat, co tam treba nastavit. |
||
wrestler Profil |
#13 · Zasláno: 23. 10. 2008, 19:30:01
Davex
Díky moc za link, tamní kód jsem použil a dosáhl tak požadovaného výsledku. Račte si prohlédnout. |
||
Časová prodleva: 15 let
|
0