siGGi: xmlHttpRequest(): Sicherheitswarnung im IE

Hallo Leute,

ich möchte eine XML-Datei per Javascript einlesen und verarbeiten und benutze dafür xmlHttpRequest(). Wenn ich dies unter FF abrufe, läuft alles bestens, jedoch wenn ich IE benutze, muss ich erst die Sicherheitswarnung bestätigen, um das Script zu Ende parsen zu können. Kann man was gegen diese lästige Meldung tun? (möglichst so, dass nicht jeder Browser einzeln konfiguriert werden muss, der die Seite abruft) Außerdem frage ich mich, ob in Zukunft bei jeder Seite, die auf Ajax basiert, erstmal eine derartige Meldung "weggeklickt" werden soll... Das kanns doch nicht sein.

Danke für Eure Antworten

  1. Hallo Leute,

    ich möchte eine XML-Datei per Javascript einlesen und verarbeiten und benutze dafür xmlHttpRequest(). Wenn ich dies unter FF abrufe, läuft alles bestens, jedoch wenn ich IE benutze, muss ich erst die Sicherheitswarnung bestätigen, um das Script zu Ende parsen zu können. Kann man was gegen diese lästige Meldung tun? (möglichst so, dass nicht jeder Browser einzeln konfiguriert werden muss, der die Seite abruft) Außerdem frage ich mich, ob in Zukunft bei jeder Seite, die auf Ajax basiert, erstmal eine derartige Meldung "weggeklickt" werden soll... Das kanns doch nicht sein.

    Danke für Eure Antworten

    Ich habe zwar nicht herausgefunden, WARUM responseXML im IE nicht geht (responseText gibt den Inhalt der XML-Datei wieder), aber es geht nicht. Nun habe ich ein Workaround für den IE gefunden, der folgendermaßen lautet:

    xmlObj = new ActiveXObject("Msxml2.DOMDocument");
    xmlObj.loadXML(http.responseText);

    xmlObj kann genauso verwendet werden, wie responseXML dann. Alles schön und gut, aber dies funktioniert im IE nur, wenn ich keine Sonderzeichen wie ° o.ä. benutze, obwohl ich meiner Meinung nach den richtigen Zeichencode in der XML-Datei verwende. (encoding="ISO-8859-1") Habt ihr 'ne Idee?

    1. Hey,

      aber dies funktioniert im IE nur, wenn ich keine Sonderzeichen wie ° o.ä. benutze, obwohl ich meiner Meinung nach den richtigen Zeichencode in der XML-Datei verwende. (encoding="ISO-8859-1") Habt ihr 'ne Idee?

      es wäre toll, wenn du das ganze genauer beschreiben würdest, ohne Gedankenlesen kann man nämlich nur raten, was bei dir passiert.

      Was ist "dies"? Beschreibe zunächst dein Vorhaben in Worten. Was machst du? Was erhältst du? Was erwartest du tatsächlich?

      Dann zeige Quellcode und Beispieleingabedaten, so dass wir deinen Code auf Korrektheit prüfen können und ob damit das Vorhaben tatsächlich wie beabsichtigt umgesetzt wurde.

      1. Hey,

        aber dies funktioniert im IE nur, wenn ich keine Sonderzeichen wie ° o.ä. benutze, obwohl ich meiner Meinung nach den richtigen Zeichencode in der XML-Datei verwende. (encoding="ISO-8859-1") Habt ihr 'ne Idee?

        es wäre toll, wenn du das ganze genauer beschreiben würdest, ohne Gedankenlesen kann man nämlich nur raten, was bei dir passiert.

        Was ist "dies"? Beschreibe zunächst dein Vorhaben in Worten. Was machst du? Was erhältst du? Was erwartest du tatsächlich?

        Dann zeige Quellcode und Beispieleingabedaten, so dass wir deinen Code auf Korrektheit prüfen können und ob damit das Vorhaben tatsächlich wie beabsichtigt umgesetzt wurde.

        In FF speichert die Eigenschaft responseXML den Elementbaum der XML-Datei, wogegen die Eigenschaft in IE leer ist bzw. keine Elemente enthält. Mit dem o.g. Workaround kann ich auch unter IE die XML-Daten über node ansteuern, jedoch geht das nur, wenn keine "extravaganten" Sonderzeichen vorhanden sind. Ich benutze den Zeichensatz ISO-8859-1 in der XML-Datei, der ja eigentlich Sonderzeichen unterstützen sollte (wie gesagt, in FF tut er das).

        Mein Code:

        function getHttpObject() {
                        var xmlHttp = false;

        // Mozilla, Opera, Safari sowie Internet Explorer 7
                        if(typeof XMLHttpRequest != 'undefined') {
                            xmlHttp = new XMLHttpRequest();
                        }

        if(!xmlHttp) {
                            // Internet Explorer 6 und älter
                            try {
                                xmlHttp  = new ActiveXObject("Msxml2.XMLHTTP");
                            } catch(e) {
                                try {
                                    xmlHttp  = new ActiveXObject("Microsoft.XMLHTTP");
                                } catch(e) {
                                    xmlHttp  = false;
                                }
                            }
                        }

        return xmlHttp;
                    }

        function getXmlData(file) {
                        if(http) {
                            http.open('GET', file, true);
                            http.onreadystatechange = function () {
                                if(http.readyState == 4) {
                                    var xmlObj = http.responseXML;
                                    if(xmlObj.childNodes.length == 0) {
                                        xmlObj = new ActiveXObject("Msxml2.DOMDocument");
                                        xmlObj.loadXML(http.responseText);
                                    }
                                    alert(xmlObj.hasChildNodes());
                                }
                            };
                            http.setRequestHeader("Content-Type", "text/xml");
                            http.send(null);
                        }
                    }

    2. Hallo,

      Ich habe zwar nicht herausgefunden, WARUM responseXML im IE nicht geht (responseText gibt den Inhalt der XML-Datei wieder), aber es geht nicht.

      Zeige mal bitte das Dokument. Mit welchem MIME-Typ liefert es der Server aus? (Siehe http://web-sniffer.net/.)

      xmlObj = new ActiveXObject("Msxml2.DOMDocument");
      xmlObj.loadXML(http.responseText);

      xmlObj kann genauso verwendet werden, wie responseXML dann. Alles schön und gut, aber dies funktioniert im IE nur, wenn ich keine Sonderzeichen wie ° o.ä. benutze, obwohl ich meiner Meinung nach den richtigen Zeichencode in der XML-Datei verwende. (encoding="ISO-8859-1")

      Vielleicht erwartet IE UTF-8. Enthält das Dokument denn eine Kodierungsangabe beim Ausliefern? Und auch im Content-Type-Header?

      Mathias

    3. Liebe(r) siGGi,

      da habe ich doch bei eigenen Recherchen was für Dich gefunden:
      http://developer.apple.com/internet/webcontent/xmlhttpreq.html

      Da heißt es unter anderem:

      Note: It is essential that the data returned from the server be sent with a Content-Type set to text/xml. Content that is sent as text/plain or text/html is accepted by the instance of the request object however it will only be available for use via the responseText property.

      Liebe Grüße aus Ellwangen,

      Felix Riesterer.

      1. Liebe(r) siGGi,

        da habe ich doch bei eigenen Recherchen was für Dich gefunden:
        http://developer.apple.com/internet/webcontent/xmlhttpreq.html

        Da heißt es unter anderem:

        Note: It is essential that the data returned from the server be sent with a Content-Type set to text/xml. Content that is sent as text/plain or text/html is accepted by the instance of the request object however it will only be available for use via the responseText property.

        Liebe Grüße aus Ellwangen,

        Felix Riesterer.

        Ich habe getestet, den ResponseHeader auszulesen, jedoch ist der sowohl in FF als auch im IE leer. Könnte es daran liegen, dass ich das HTML-File mit dem JS Code lokal aufrufe und nicht auf einem Webserver liegen habe?

        1. Liebe(r) siGGi,

          Könnte es daran liegen, dass ich das HTML-File mit dem JS Code lokal aufrufe und nicht auf einem Webserver liegen habe?

          ähmm... wie bitte? Meinst Du mit lokal eine lokale HTML-Datei, die Du einfach so mit einem Browser öffnest, in der ein Javascript ein XMLHttpRequest starten soll?

          Da könntest Du an der "same origin policy" scheitern, denn Javascript erlaubt es nicht, über Domänengrenzen hinweg auf Dokumente zuzugreifen - auch nicht über das XMLHttpRequest-Objekt. So jedenfalls hatte ich es auf der von mir verlinkten Seite gelesen. Für Dich nocheinmal herausgefischt:

          When the XMLHttpRequest object operates within a browser, it adopts the same-domain security policies of typical JavaScript activity (sharing the same "sandbox," as it were). This has some important implications that will impact your application of this feature.

          First, on most browsers supporting this functionality, the page that bears scripts accessing the object needs to be retrieved via http: protocol, meaning that you won't be able to test the pages from a local hard disk (file: protocol) without some extra security issues cropping up, especially in Mozilla and IE on Windows.

          Liebe Grüße aus Ellwangen,

          Felix Riesterer.