大家好!我有个关于支持Safari的问题想向大家请教一下。问题如下:
var xslt = new XSLTProcessor();
xslt.importStylesheet(xsltDoc);

//set the parameters
xslt.setParameter(null,"testString","aaa");
xslt.setParameter(null,"testDom",xmlDoc);
//The following alert will display undefined
alert( typeof(xslt.getParameter(null,"testDom") ));

var result = xslt.transformToDocument(xmlDoc);在xsl中,如果像下面这样输出xmlDoc:<xsl:value-of select="$testDom"/>输出结果是[object Document]   --变成了字符串,在IE和FF的输出结果是aaa

解决方案 »

  1.   

    Hi all, 
    Are you familiar with Safari? I have a site that works perfectly in IE6 IE7 FF2 FF3 but not in the latest Safari. When I test xsltProcessor, there is a error as following, I have dealt with this issue for several days, but there is no result. Could someone help me? 
    [Code] 
    <html> 
    <head> 
        <title>Enter the title of your HTML document here</title> 
        <script type="text/javascript"> 
          var xmlDoc; 
          var xsltDoc; 
          var xmlFile="Test_xsltProcessor.xml"; 
          var xsltFile="Test_xsltProcessor.xsl";       function show_xml() 
          { 
            // Firefox, Opera 8.0+, Safari 
            if(document.implementation && 
    document.implementation.createDocument) 
            { 
               //load xml file 
               XMLDocument.prototype.load = function(filePath) 
               { 
                  var xmlhttp = new XMLHttpRequest(); 
                  xmlhttp.open("GET", filePath, false); 
                  xmlhttp.setRequestHeader("Content-Type","text/xml"); 
                  xmlhttp.send(null); 
                  var newDOM = xmlhttp.responseXML; 
                  if( newDOM ) 
                 { 
                   var newElt = this.importNode(newDOM.documentElement, 
    true); 
                   this.appendChild(newElt); 
                   return true; 
                } 
             } 
             xmlDoc = document.implementation.createDocument("", "", 
    null); 
             xmlDoc.async = false; 
             xmlDoc.load(xmlFile); 
             //load xsl file 
             var xsltDoc =  document.implementation.createDocument("", 
    "", null); 
             xsltDoc.async = false; 
             xsltDoc.load(xsltFile); 
             //build the relationship between xml file and xsl file 
             var xslt = new XSLTProcessor(); 
             xslt.importStylesheet(xsltDoc); 
             //set parameters 
            xslt.setParameter( null, 'testDom', xmlDoc); 
            //transform 
            var doc =  xslt.transformToFragment(xmlDoc, document); 
            //append the xml result to the main html file 
            var target=document.getElementById("divContent"); 
            while (target.hasChildNodes()) 
            { 
                target.removeChild(target.lastChild); 
            } 
            target.appendChild(doc); 
          } 
          else if(typeof window.ActiveXObject != 'undefined') 
          { 
             //load xml file 
             xmlDoc = new ActiveXObject( "MSXML2.FreeThreadedDomDocument. 
    3.0" ); 
            xmlDoc.async = false; 
            xmlDoc.load(xmlFile); 
            //load xsl file 
            xsltDoc = new ActiveXObject( "MSXML2.FreeThreadedDomDocument. 
    3.0" ); 
            xsltDoc.async = false; 
            xsltDoc.load(xsltFile); 
            var template = new ActiveXObject( "MSXML2.XSLTemplate. 
    3.0" ); 
            template.stylesheet = xsltDoc; 
            var processor = template.createProcessor(); 
            processor.input = xmlDoc; 
            processor.addParameter("testDom",xmlDoc); 
            processor.transform(); 
            //append the xml result to the main html file 
            var target=document.getElementById("divContent"); 
            target.innerHTML = processor.output;; 
           } 
        } 
        </script> 
    </head> 
    <body onload="show_xml();"> 
        <p>Enter the body text of your HTML document here</p> 
        <div id="divContent"></div> 
    </body> 
    </html> 
    The xsl file is as following: 
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/ 
    Transform"> 
      <xsl:param name="testDom"/> 
      <xsl:template match="/"> 
        <div> 
          <xsl:value-of select="$testDom"/> 
        </div> 
      </xsl:template> 
    </xsl:stylesheet> 
    The xml file is as following: 
    <?xml version="1.0" encoding="UTF-8"?> 
    <root> 
      <test>aaa</test> 
    </root> 
    In Safari, the output is [object Document]   --It changes to 
    string,but in IE and 
    Firefox, the output is aaa. Could someone help me? Any help will be much appreciated.