Myslel som, ze ti staci, aby sa pouzivatel dostal na konkretny rss subor, co by sa dalo vyriesit jednoduchym presmerovanim. Ale pozeram, ze chces s RSSkom dalej pracovat (mas tam nejaku fciu processRSS), takze je moja rada irelevantna. Sprav to tak, ze ak bude adresa zacinat na http://
Kód:
if (document.rssform.rssurl.value.match(/^http:\/\//)
...tak budes nacitavat nejaky tvoj interny subor, uvediem priklad:
Kód:
xhr.open("GET","subor-pre-ziskanie-cudzieho-rss.php?adresa="+encodeURIComponent(document.rssform.rssurl.value),true);
Nasledne sa v subore subor-pre-ziskanie-cudzieho-rss.php pokusis stiahnut a zobrazit subor $_GET['adresa'], to by islo (ak vsetko dobre pojde) aj takto:
Kód:
<?php
header('content-type: application/xml');
//POZOR! $_GET['adresa'] treba osetrit, inak sa ti hocikto moze hrabat v skriptoch. Minimalne skontroluj, ci sa zacina na http://.
readfile($_GET['adresa']);
?>
...a malo by to ist.
Inak pre Ajax medzi domenami by bolo mozne pouzit XDomainRequest, ale jednak to nepodporuju vsetky prehliadace, a jednak tam musi byt aj nejake povolenie zo strany servera, ktory volas, cize nepouzitelne.
Co sa tyka mojej druhej poznamky - je taka zasada, ze v prvom rade by mal prehliadac pouzivat standardne metody, a az ak nie su dostupne, tak tie propertialne. V tvojom kode napriklad Explorer 7 pouzije nestandardny ActiveXObject miesto XMLHttpRequestu, aj ked ma podporu pre oba. Konkretne v tvojom kode by to nemalo nijak vadit, kedze neviem o ziadnej nekompatibilite medzi XMLHttpRequest a XMLHTTP cez ActiveX, ale je to dobry zvyk a mozno ti to niekedy pomoze. Takze takto:
Kód:
if (window.XMLHttpRequest)
xhr = new XMLHttpRequest();
else if (window.ActiveXObject)
xhr = new ActiveXObject("Microsoft.XMLHTTP");
else
alert("not supported");
Jo a este jedna poznamka - Linuxovy prehliadac Konqueror nepodporuje XML a teda ani responseXML. Je teda dobre upovedomit pouzivatelov, ze nieco nie je dobre, inak sa budu cudovat, ze klikaju a nic sa nedeje.
Kód:
if (!xhr.responseXML) { alert('Trikrat hanba vasmu prehliadacu'); }