Autor Zpráva
WanTo
Profil
Potřeboval bych vložit do obyčejného XML (ne XHTML) dokumentu JavaScript. Otázka zní jednoduše: jak na to? Pomocí XHTML to dokážu, ale rád bych se bez něj obešel.

Příklad:
<?xml version="1.0" encoding="utf-8"?>
<muj-dokument>
<muj-skript>
<![CDATA[
window.alert("Ahoj");
]]>
</muj-skript>
</muj-dokument>
thingwath
Profil
Hm, proč si k otázce přidal i řešení? :-)
WanTo
Profil
thingwath
To funguje?
thingwath
Profil
Co si představuješ pod funguje?

Jestli si skutečně fajnšmekr, můžeš si přepsat syntaxi JS do XML :-) To by bylo velmi hardcore :-)
nightfish
Profil
To funguje?
Jak si představuješ, že by to mělo fungovat?
WanTo
Profil
Co si představuješ pod funguje?
To samé, co by udělal JavaScript v XHTML. Tedy zobrazil dialogové okno s textem Ahoj.
thingwath
Profil
WanTo
To ale musí udělat interpret Javascriptu, to na XML nezáleží :-) Musíš to XML načíst něčím co bude vědět, že to je JS a že ho tak má spustit... Takové XML může mít milión podob.
WanTo
Profil
thingwath
Toho jsem se právě obával. Takže to jde asi jen pomocí XHTML.
thingwath
Profil
Co sis prosímtě představoval? Pro XTHML je definováno, že to a to je Javascript a odpovídající uživatelský agent s tím může pracovat. V tom tvém XML mohou být třeba pohádky na dobrou noc, jak to má kdo vědět? :-)
WanTo
Profil
Představoval jsem si, že prohlížeči nějak vysvětlím, že v <muj-skript> je JavaScript.
thingwath
Profil
Pře-XSLT-uješ to na XHTML?
WanTo
Profil
S XSLT vůbec neumím, takže asi těžko.
thingwath
Profil
Není to (tak) těžké. Jenom je to trochu úchylné v tom, že je to vlastně zčásti běžný programovací jazyk s XML zápisem.
WanTo
Profil
Každopádně bude asi nejjednodušší použít XHTML.
Chamurappi
Profil
Reaguji na WanTo:
<script xmlns="http://www.w3.org/1999/xhtml"> ... </script>
Pak XSLT nepotřebuješ.
WanTo
Profil
Chamurappi
Díky moc, přesně to jsem potřeboval. Celkem by mne zajímalo, jak to vlastně funguje, z mého pohledu je to téměř zázrak :-)

Ještě připojím jeden dotaz: jde toto nějak zprovoznit i v IE? Tam se mi místo provedení skriptu vypíše obsah v sekci CDATA.
Chamurappi
Profil
Reaguji na WanTo:
Zázrak to není, použije se <script> z XHTML. Jelikož Explorer XHTML také trochu podporuje, mělo by fungovat tohle:
<html:script xmlns:html="http://www.w3.org/1999/xhtml"> ... </html:script>
Připrav se, že narazíš na jisté nekompatibility.
WanTo
Profil
Chamurappi
Zkusím to. Každopádně aplikace (resp. paskvil, na kterém se chci naučit AJAX, CGI a ještě tuhle zrůdnost s XML), kterou vytvářím je Linux-only, takže to není až zas tolik důležité.

Teďka jsem se však dostal k dalšímu problému: Někde v XML dokumentu mám "odkaz": <odkaz id = "odkaz">Text odkazu</odkaz>.

V JavaScriptu se mu pokouším přiřadit ovladač události onclick:
function presmeruj() {
document.location.href = "http://nejake_stranky";
}
document.getElementById("odkaz").onclick = presmeruj;

Bohužel, nefunguje to. Skript skončí s chybou "Could not convert undefined or null to object".

Co s tím? Je vůbec možné takto přiřadit ovladač události nějakému XML prvku?
Dero
Profil
Bohužel, nefunguje to. Skript skončí s chybou "Could not convert undefined or null to object".

Co s tím? Je vůbec možné takto přiřadit ovladač události nějakému XML prvku?


V Mozille lze šamanským způsobem v XML dokumentu atribut id nastavit (pomocí DTD) na typ ID, potom k němu můžeš přistupovat vlastností getElementById. V praxi se však používá procházení obecného stromu dokumentu pomocí getElementsByTagName a vlastností pro práci s potomky.
jozob
Profil
WanTo
"Co s tím?"
Využiť výhody XML -- podobne ako v prvom prípade -- využi menný priestor XHTML. :)

(to znamená, požičaj si z XHTML aj element A)
WanTo
Profil
jozob
To nechci. Sice je to jednodušší a spolehlivější, ale já mám dost času na hraní a chci to zkusit bez A z XHTML :)

Dero
Díky moc za nápovědu, začíná se mi dařit.
WanTo
Profil
Hurá, povedlo se mi přesvědčit prohlížeč, aby po kliknutí na <odkaz href = "http://nějaká_adresa">Nějaký text</odkaz> zobrazil odkazovanou stránku :o)

Zde je JavaScript:

function presmeruj() {
location.href = this.getAttribute("href");
}

function projit(element) {
for(childs = element.childNodes, i = 0; i < childs.length; i++) {
if(childs[i].nodeType == Node.ELEMENT_NODE) {
if(childs[i].tagName == "odkaz") {
childs[i].onclick = presmeruj;
}
else projit(childs[i]);
}
}
}

projit(document);
thingwath
Profil
V XML bych možná volil spíš XLink, minimálně Gecko to podporuje.
WanTo
Profil
thingwath
Podporuje XLink Opera?
thingwath
Profil
Nevím, zřejmě ne. Ale zase když to budeš používat v něčem neprohlížečovém, asi tam nebudou chtít mít celé XHTML jenom kvůli odkazům (proč vůbec XHTML nepoužívá XLink?).
Jirka Kosek
Profil *
Proboha proč to řešit JavaScriptem? Nejlepší by bylo použít XLink, ten však popodporuje jen Mozilla. Takže buď vlastní element nebo XLink a chování dodefinovat v HTC pro IE, v XBL pro Mozillu (pokud nepoužijete XLink) a v Opeře se dá odkaz "zaktivnit" pomocí:

odkaz { -o-link: attr(href);
-o-link-source: current;
text-decoration: underline; }

Nicméně jediná spolehlivá metoda, jak XML zobrazit v prohlížeči včetně obrázků a odkazů, je z toho ještě na serveru (nejlépe pomocí XSLT) udělat HTML (nebo XHTML).
WanTo
Profil
Jirka Kosek
Já vím, že to jde mnohem jednodušeji. Jen si hraju :-)
webcreator
Profil
mam takovej problem, neco podobnyho jsem udelal tak, ze to kazdejch 20ms otevira xml, ale zapomel jsem to zavirat a porad to zvetsuje zaplneni RAM, takze se vas ptam, jak se zavira otevreni xml
Manq
Profil
webcreator
neotvírej stráré téma
Toto téma je uzamčeno. Odpověď nelze zaslat.