Avatar billede mindplay Nybegynder
09. august 2006 - 15:19 Der er 1 kommentar og
1 løsning

hente XML med javascript i IE og Firefox

Jeg forsøger at hente et XML-feed med aktuelle kurser - jeg vil gerne lave valutakurs-omregner, som er ren JavaScript uden nogen krav til serversiden.

Nedenstående script henter de aktuelle kurser fra den Europæiske Nationalbank's XML-feed, og viser dem i en tabel på siden.

Det virker fint i IE. Og det virker også i Firefox, men vel at mærke kun hvis du downloader XML-feed'et, og gemmer det i en lokal fil med navn "test.xml", og retter "url" variablen i starten af scriptet herunder... Hvis jeg prøver at læse det oprindelige XML-feed, giver Firefox en fejl.

Det ser således ikke ud til, at det er en fejl i min kode? Men derimod måske et sikkerhedsproblem - måske Firefox ikke tillader at hente XML-feed'et fra et fremmet domæne??

Findes der en anden måde at hente et XML-feed på, i Firefox, hvor man gerne må hente det fra et andet domæne?

Tak!

----------------------------------------------------------------

<html>

<head>

<script type="text/javascript">

var xmlDoc;

function loadXML() {

    var url = "http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml";
    //var url = "test.xml";

    if (window.ActiveXObject) {
       
        // code for IE
        xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.async = false;
        xmlDoc.load(url);
        loaded();
       
    } else if (document.implementation && document.implementation.createDocument) {
       
        // code for Mozilla, etc.
        xmlDoc = document.implementation.createDocument("", "", null);
        xmlDoc.load(url);
        xmlDoc.onload = loaded;
       
    } else {
        alert('Your browser cannot handle this script');
    }
   
}

var rates = new Array();

function loaded() {
   
    var env = xmlDoc.documentElement;
    var env_cube = env.getElementsByTagName("Cube")[0];
    var env_cube_cube = env_cube.getElementsByTagName("Cube")[0];

    var time = env_cube_cube.getAttribute("time");

    var cubes = env_cube_cube.getElementsByTagName("Cube");

    for (var i=0; i<cubes.length; i++) {
        rates[ cubes[i].getAttribute("currency") ] = parseFloat( cubes[i].getAttribute("rate") );
    }
   
    draw_table();
   
}

function draw_table() {

    var table = document.getElementById("p_table");
   
    var html = "<table>";
    for (var currency in rates) {
        html += "<tr><td>" + currency + "</td><td>" + rates[currency] + "</td></tr>";
    }
    html += "</table>";
   
    table.innerHTML = html;
   
}

</script>

</head>

<body onload="loadXML()" bgcolor="white">

<p id="p_table">
</p>

</body>

</html>
Avatar billede mindplay Nybegynder
09. august 2006 - 15:34 #1
Hovsa.

Nej, det virker heller ikke i IE ... kun så længe .html-filen ligger lokalt. Så snart den uploades til en anden server, virker det ikke længere.

Man kan se selve scriptet i funktion her:

http://mindplay.dk.googlepages.com/test.htm

Virker både i IE og i Firefox.

Men altså kun så længe XML-filen ligger på samme server, som den gør nu.

Men det ændrer så ikke rigtig mit spørgsmål - er der en den måde, at læse en XML-fil fra et andet domæne?
Avatar billede mindplay Nybegynder
10. august 2006 - 11:39 #2
Okay, sygt.

Det viser sig, at man af "sikkerhedshensyn" ikke MÅ læse XML-filer fra et andet domæne. Så min næste idé var at lave en løsning i Flash, men det kan man heller ikke - den har samme "sikkerhedshensyn". Man kan heller ikke hente indholdet ind i en IFRAME eller lignende, da scripten på tværs af frames med indhold fra forskellige domæner også er blokkeret af "sikkerhedshensyn".

Det kan så undre mig hvordan det skulle give nogen som helst form for sikkerhed, idet enhver kan lave et simpelt "proxy" PHP-script med 2 linier kode - der tager en URL som parameter, henter siden, og sender den til klienten.

Hvilket så ser ud til at være den eneste løsning, hvad der desværre gør hele mit script meningsløst - hvis der alligevel skal hentes data fra min server, kan jeg jo ligesågodt behandle XML or formattere indholdet på serversiden; så er der ingen grund til at belaste klienten med JavaScript længere.

Øv.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester