2

以下内容曾经适用于 Firefox 3.5.x 和 3.6.x,但不再适用于 Firefox 11.x 或 Safari 5.1.x。Javascript 不是我的专长,所以我跟不上最近的变化。

具体来说,“浏览”按钮显然仍然“成功”加载了一个文件(这应该是从 FCP 导出的 XML 序列,尽管这没有经过验证),但是在按下“处理”按钮时,XSLT 的结果不再出现在“输出”DIV就像他们过去使用以前的浏览器版本一样。

它可以在http://johnpilgrim.net/color/jProcess.html的上下文中看到

可在 http://johnpilgrim.net/color/sample.xml上找到用于测试的适当示例 XML 文件

html、javascript 或 xsl 没有任何变化,因此这似乎是最近浏览器的变化。我只设计和测试了它在 Firefox 中的工作,所以从来没有在其他任何东西上测试过。

想法?解决方案?

谢谢!约翰

<head>

    <script type="text/javascript">

        function jProcess(){
            // Get the file contents locally, using the nifty Firefox 3 nsIDOMFile interface
            var file_contents = document.getElementById('xml_file').files.item(0).getAsText("utf8");

            // Cast/Convert to an XML Document
            var parser = new DOMParser();
            xmlDoc = parser.parseFromString(file_contents, "text/xml");

            // XSLT Transformation
            var xslt = document.implementation.createDocument("", "", null);
            xslt.async = false;
            xslt.load("jProcess.xsl");
            var process = new XSLTProcessor();
            process.importStylesheet(xslt);
            var result = process.transformToFragment(xmlDoc, document);

            // Show the output
            document.getElementById('output').innerHTML= " ";               
            document.getElementById('output').appendChild(result);

            return false;
        };
    </script>
</head>

<body>
<form method="post" onsubmit="return jProcess();">
<fieldset>
    <legend>Select the XML file for the FCP sequence you want to process into HTML.</legend>
    <input type="file" size=100 name="xml_file" id="xml_file">
    <input type="submit" value="Convert">
</fieldset>
</form>
<div id="output"></div>

4

1 回答 1

3

我在 Windows 上使用 Firefox 12 尝试了您的示例,错误控制台显示错误

Timestamp: 01.05.2012 11:23:43
Error: document.getElementById("xml_file").files.item(0).getAsText is not a function
Source File: http://johnpilgrim.net/color/jProcess.html
Line: 40

File因此,由于在输入 type="file" 控件上公开的 API 的变化以及在该控件公开的对象中公开的对象,代码根本不再工作FileList。基于https://developer.mozilla.org/en/DOM/File方法 getAsText 在 Gecko/FF 7 中已过时,并且可能稍后会被删除。要读取文件的内容,您现在应该使用https://developer.mozilla.org/en/DOM/FileReader#readAsText%28%29。这似乎是一个更进一步的异步 API,因此您将不得不重组您的代码:http ://home.arcor.de/martin.honnen/xml/test2012050101.html (该示例适用于当前版本的 Firefox、Opera 和铬合金)。

所以一个使用 FileReader 的例子看起来像

function transform(file, sheetUrl) {
  if (typeof FileReader !== 'undefined') {
    var fileReader = new FileReader();
    fileReader.onload = function(evt) {
      var doc = new DOMParser().parseFromString(this.result, 'application/xml');
      var proc = new XSLTProcessor();
      var req = new XMLHttpRequest();
      req.open('GET', sheetUrl, false);
      req.send(null);
      proc.importStylesheet(req.responseXML);
      document.body.appendChild(proc.transformToFragment(doc, document));
    };
    fileReader.readAsText(file);
  }
  else {
    console.log('No FileReader support.');
  }
}
于 2012-05-01T09:58:27.953 回答