Lokutus
Ego sum Lokutus flagellum dei

fix_eolas.js verze 3
25.01.2007
Development

Když dgx na své latríně, která má dnes lehce přiklopený dekl, zveřejnil postup, kterak obejít nutnost ruční aktivace objektů, vložených do html stánky, potichu jsem zajásal. No, zajásal jsem sice o pár týdnů později, když jsem to opravdu potřeboval, ale to nic nemění na tom, že jsem se s nadšením vrhl na testování jedné intranetové aplikace. Vzápětí nastalo velké zklamání. Vůbec nic to nedělalo.

Úvod

V první řadě musím prohlásit, že nejsem líný. Ale když mám dělat něco, co mě jenom zdržuje a přitom je to úplně zbytečné, raději sáhnu po nějakém hotovém řešení, které bez dalších okolků naimplementuji. Pokud to nefunguje, pouštím se teprve do rozboru. Tudíž ve chvíli, kdy jsem zjistil, že řešení se skriptem fix_eolas nefunguje, začal jsem se v něm hrabat.

Geneze

Teď čeho se ten problém týkal. Jak všichni "noutsaři" jistě vědí, je mnoho způsobů, jak zobrazit formulářové akce v internetovém rozhraní databáze Lotus Notes. Tedy jsou dva základní. Buď si v zájmu čistoty kódu napíšu ty akce sám s použitím javascriptu, anebo je nechám vygenerovat serverem. Druhý způsob nabízí další dvě možnosti. Můžu použít html action bar, anebo java applet. Lotus Notes – nastavení action baru
V aplikacích, postavených na Lotus Workflow používáme výchozí nastavení, tedy java applet. Action bar pak vypadá přirozeně a velice "aplikačně". :-) Já osobně to nepreferuji, ale tohle nejsou moje aplikace. Kromě toho je to umístěno na intranetu, takže s rychlostí nejsou problémy. Problémy však u zákazníka nastaly s updatem exploreru, který teď nutí chudáky uživatele klikat na tlačítka dvakrát. Takže si stěžovali a my jsme to měli nějak pořešit.

Toliko ke genezi. A teď proč to vlastně nefungovalo

Nefungovalo to z jednoho prostého důvodu. DGX řeší pouze elementy typu OBJECT, zatímco applety jsou uzavřeny v elementu APPLET. Jednoduché. Truchu jsem upravil původní skript a verze 2.1 počítala i s applety. Jenže ouha, fungovalo to jen částečně. Applet to ze stránky vyjmulo, ale už ho to tam nevrátilo zpět. A applet se načítal a načítal... Nechal jsem si tedy vrátit outerHTML toho appletu a ŠOK! Tereze do ksichtu koukám.
Eh, pardon. Trochu jsem se nechal unést.
Tedy, outerHTML vátilo element APPLET se všemi atributy, ale místo asi patnácti elemetů PARAM vrátilo pouze dva, a to ještě takové, které ve zdrojáku nebyly - _cx a _cy, což je pozice toho appletu ve stránce. Chvíli jsem si s tím hrál, a když jsem zjistil, že ten applet nepřekecám, musel jsem skript přepsat.

Výsledek je tedy verze 3, která bez problému zpracuje všechny objekty i applety ve stránce.

// © David Grudl aka -dgx-
// © Jiri Krakora aka -lokutus-
//
// version 3
// more info: http://www.dgx.cz/knowhow/eolas-workaround/

var applets = document.getElementsByTagName("applet");
var objects = document.getElementsByTagName("object");

function eolasObject(i) {
    objects[i].outerHTML = objects[i].outerHTML;
}

function eolasApplet(i) {
 var txt = "";
 for (var x=0; x < applets[i].childNodes.length; x++) {
  if (applets[i].childNodes[x].nodeType == 1) {
   if (applets[i].childNodes[x].nodeName == "PARAM") {
    txt = txt + applets[i].childNodes[x].outerHTML;
   }
  }
 }
 var n = applets[i].outerHTML.substr(0, applets[i].outerHTML.indexOf(">")) + ">" + txt + "</APPLET>";
 applets[i].outerHTML = n;
}

for (var i=0; i<objects.length; i++)
    window.setTimeout("eolasObject(" + i + ")", 1);
   
for (var i=0; i<applets.length; i++)
    window.setTimeout("eolasApplet(" + i + ")", 1);

A to je vše.

linkuj.cz vybrali.sme.sk

Komentáře



Přidání komentáře...