大家好!我有个关于支持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
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
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.