Autor Zpráva
Iceman24
Profil *
Prosím o radu. Následující kód funguje pod Google Chrom a Firefoxem v pořádku, ale pod IE8 ne.

document.write("<div id=\"cse\" style=\"width: 100%;\"></div>");
document.write("<scr"+"ipt language=\"JavaScript\" src=\"http://www.google.com/jsapi\" type=\"text/javascript\">");
document.write("</scr"+"ipt>");
document.write("<scr"+"ipt language=\"JavaScript\" type=\"text/javascript\">google.load('search', '1', {language : 'cs'});google.setOnLoadCallback(function() {var customSearchControl = new google.search.CustomSearchControl('016856020865680136112:do-flvffrd4');customSearchControl.setResultSetSize(google.search.Search.SMALL_RESULTSET);customSearchControl.draw('cse');}, true);");
document.write("</scr"+"ipt>");
document.write("<link rel=\"stylesheet\" href=\"http://www.google.com/cse/style/look/default.css\" type=\"text/css\"/>");


Jde o vyhledavač textu od Googlu a ten se v IE8 vůbec nezobrazí.
Radek9
Profil
Iceman24:
Zkus použít document.createElement().
Chamurappi
Profil
Reaguji na Radka9:
Ty vidíš nějaký důvod, proč by to s document.write nemělo fungovat? Přepsat to s využitím uvedené metody nebude snadné a jestli není problém v document.write, je to zbytečná práce.


Reaguji na Icemana24:
Chybu nevidím. Prosím o odkaz na živou ukázku.
Iceman24
Profil *
Chamurappi:

http://www.glf.cz/cz/about/


Když napíšu ten vnořený skript zvlášť pouze do té jedné stránky, tak všechno funguje i v IE8.
Chamurappi
Profil
Reaguji na Icemana24:
Nefunguje to ani v sedmičce. Problém asi skutečně bude souviset s document.write — když vypisuješ kód po částech, prohlížeč nemusí správně uhodnout, kdy se má nad ním zamyslet a případně ho opravit (pouzavírat otevřené <div>y, <script>y).

Zkusil bych následující úpravu:
Na začátek skriptu dej var html = []; (tím vytvoříš pole), pak nahraď všechny document.write za html.push (tím naplníš pole) a na úplný konec přidej document.write(html.join("")); (tím vypíšeš pole spojené do jednoho řetězce).

Mimochodem, jsi si vědom nevýhod, jaké má vkládání menu přes JavaScript? Nebyl by lepší nějaký jiný postup?
Iceman24
Profil *
Reaguji na Chamurappi:

Tak jsem to přepsal podle návodu a výsledek je bohužel pořád stejný. Navíc pokud do <div id="cse"...></div> přidám nějaký text (Loading) tak se tento text v IE zobrazí. Předpokládám, že chyba bude až v samotném vnořeném skriptu.
_es
Profil
Iceman24:
Aké má vlastne toto použitie document.write účel?
Nestačí dať ten kód normálne do stránky?
Značka link by mala byť len v hlavičke, nie v body.
Iceman24
Profil *
Reaguji na _es:

Důvodem je velikost webu. Asi to není ideální, ale celý web má teď možná přes sto stránek (historický vývoj + mé omezené znalosti). Proto to chci řešit jen na jednom místě pomocí JS, který již dnes už každá stánka volá. Bohužel nemám ani čas a ani chuť celý web předělávat. A protože to řešení ve dvou ze třech prohlížečů funguje, tak jsem doufal, že to ani nebude nutné...
Iceman24
Profil *
Iceman24:
Tak už vím, kde je problém.
Internet Explorer má problém s následujícím voláním skriptu:
html.push("<scr"+"ipt language=\"JavaScript\" src=\"http://www.google.com/jsapi\" type=\"text/javascript\">");

Důsledkem toho, pak nezná hodnotu "google.load", která je použita dále. Pokud volání skriptu provedu uvnitř každé stránky, vše funguje i v IE.

Předpokládám, že chyba bude v atributu "src", ale nevím kde.

Můžete mi prosím poradit?

Díky
Iceman24
Profil *
Iceman24:

Tak problém objeven a vyřešen.
Viz: http://stackoverflow.com/questions/94141/javascripts-document-write-inline-script-execution-order

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0