Frank Baumgärtner: Brower, XSL und Javascript

Hallo!

Versteht FF (bzw. Opera) Javascript nicht innerhalb einer XSL? Ich kriege nicht mal ein simples Hallo Welt zum Laufen. Im IE funktioniert das ohne Probleme.

  1. Hi Frank,

    aus Erfahrung kann ich dir berichten, dass sowohl FF (1.5 und neuer getestet) als auch Opera (9.6.x getestet) in der Lage sind, Javascript mit xsl zu generieren (und auszuführen).

    Da ich aber weder das xml, noch das xsl (von dem Transformationsergebnis ->html ganz zu schweigen) von dir habe und leider auch (für FF) die Ausgabe der Javascript Konsole fehlt, kann ich noch nicht mal raten, was falsch läuft.

    Grüße,
    Richard

  2. Hallo Frank,

    Versteht FF (bzw. Opera) Javascript nicht innerhalb einer XSL? Ich kriege nicht mal ein simples Hallo Welt zum Laufen. Im IE funktioniert das ohne Probleme.

    Ohne dieses "Hallo Welt"-Beispiel lässt sich wenig zu Deinem konkreten Problem sagen. Der folgende Test funktioniert mit IE 7 und Opera 9.62, aber nicht mit Firefox 3.03:

    <?xml version="1.0" encoding="UTF-8"?>  
    <?xml-stylesheet href="hallo_welt_mit_js.xsl" type="text/xsl"?>  
    <meldung>Hallo Welt!</meldung>
    
    <?xml version="1.0" encoding="UTF-8"?>  
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">  
    <xsl:output method="xml" encoding="UTF-8" media-type="text/html"  
      doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"  
      doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>  
      <!-- media-type="application/xhtml+xml" ändert nichts -->  
      
      <xsl:template match="/">  
        <html>  
          <head>  
            <title>Test</title>  
            <script type="text/javascript">  
              <xsl:text disable-output-escaping="yes">  
              //&lt;![CDATA[</xsl:text>  
              <xsl:text>  
              window.onload=function()  
              {  
                alert("</xsl:text><xsl:value-of select="meldung"/><xsl:text>");  
              }  
              </xsl:text>  
              <xsl:text disable-output-escaping="yes">  
              //]]&gt;  
              </xsl:text>  
            </script>  
          </head>  
          <body><p>Inhalt von meldung als JS-Ausgabe.</p></body></html>  
        </xsl:template>  
      
    </xsl:stylesheet>
    

    Für Firefox könnte die Angabe von type="text/xml" oder "application/xml" im XML-Dokument nützlich sein, funktioniert im Beispiel aber ebenfalls nicht und zudem zeigt dann der IE den XML-Baum an. Clientseitiges XSLT ist AFAIK nach wie vor nicht für Browser- bzw. Plattform-übergreifende Web-Anwendungen geeignet. In geschlossenen Umgebungen sieht das anders aus. Versuche die Transformation auf dem Server umzusetzen oder transformiere aus dem JavaScript-Kontext heraus, siehe Archiv).

    Das direkt transformierte Ergebnis funktioniert übrigens problemlos im FF 3.03:

    <?xml version="1.0" encoding="UTF-8"?>  
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">  
    <html>  
      <head>  
        <title>Test</title>  
        <script type="text/javascript">  
          //<![CDATA[  
          window.onload=function()  
          {  
            alert("Hallo Welt!");  
          }  
          //]]>  
        </script>  
      </head>  
      <body>  
        <p>Inhalt von meldung als JS-Ausgabe.</p>  
      </body>  
    </html>
    

    Grüße,
    Thomas

  3. Hallo!

    Versteht FF (bzw. Opera) Javascript nicht innerhalb einer XSL? Ich kriege nicht mal ein simples Hallo Welt zum Laufen. Im IE funktioniert das ohne Probleme.

    Sorry, ich hatte gestern keine Zeit mehr zu antworten. Das Problem hatte sich insofern erledigt, als ich zunächst (aus Faulheit :( ) nur das reine JavaSkript in die XSL geschrieben hatte und auf den Aufbau eines ordentlichen HTML-Gerüstes verzichtet hatte. IE schluckte das, FF nicht. Der anschließende Versuch mit richtigem Markup funktionierte dann einwandfrei. Sorry, wenn meine Dummheit Eure Zeit gestohlen hat.