Autor Zpráva
wrestler
Profil
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
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
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
document.write('<script src="adresa"></script>'); Treba?
nebo innerHTML do neceho ?
wrestler
Profil
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
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 *
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
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
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
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
Požadovaný soubor s Javascriptem se vůbec nezačne stahovat. Zkus metodu načtení skriptu pomocí funkcí DOM.
peta
Profil
--- 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
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.

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: