Bug 20444
Summary: | Could not post dom to xsl by setParameter in Safari | ||
---|---|---|---|
Product: | WebKit | Reporter: | Jason.Shang <ydshang> |
Component: | JavaScriptCore | Assignee: | Nobody <webkit-unassigned> |
Status: | RESOLVED DUPLICATE | ||
Severity: | Normal | CC: | ap |
Priority: | P2 | ||
Version: | 528+ (Nightly build) | ||
Hardware: | PC | ||
OS: | OS X 10.5 |
Jason.Shang
Hi all,
I have a site that works perfectly in IE6 IE7 FF2 FF3 but not in the
latest Safari. When I use setParameter to post dom to xsl. It will change to string while this issue doesn't happen in IE and FF. So I think maybe this is a bug. Please see the following code:
[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.
Any help will be much appreciated.Thanks!
Attachments | ||
---|---|---|
Add attachment proposed patch, testcase, etc. |
Alexey Proskuryakov
*** This bug has been marked as a duplicate of 14101 ***