我想在Chrome或Safari移动浏览器(Webkit)上使用XSLTProcessor处理网页。
我的测试在Firefox上运行良好,但在Chrome / Safari浏览器中却没有。除了非常简单的文档外,transformToDocument函数将返回null。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<p>Hello world</p>
<div>transformToDocument:</div>
<script>
var xmlSerializer = new XMLSerializer ();
var domParser = new DOMParser ();
var xsltProcessor = new XSLTProcessor ();
var xslString = '<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">' +
'<xsl:output method="html"/>' +
'<xsl:template match="//p"><p><i><xsl:value-of select="."/></i></p></xsl:template>' +
'<xsl:template match="text()"/>' +
'</xsl:transform>';
var xsl = domParser.parseFromString (xslString, 'text/xml');
xsltProcessor.importStylesheet (xsl);
var result = xsltProcessor.transformToDocument (document);
console.log (result); // null with Chrome
console.log (xmlSerializer.serializeToString (result));
document.writeln (xmlSerializer.serializeToString (result));
</script>
</body>
</html>
奇怪的是,如果我删除了meta
标签和nbsp
实体,该示例将正常工作。
您能告诉我什么地方出了问题以及如何解决它。
答案 0 :(得分:0)
回答我自己的问题:
替换nbsp实体以解决Safari中的错误(?)。
var结果= xsltProcessor.transformToDocument(domParser.parseFromString(xmlSerializer.serializeToString(document).replace('&nbsp;','&#160;'),'text / xml'));