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のコンテキストで見ることができます

テスト用の適切なサンプル XML ファイルは、 http://johnpilgrim.net/color/sample.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そのため、input type="file" コントロールで公開されている API が変更され、そのコントロールによって公開されているオブジェクトがそれぞれ公開されたため、コードは機能しなくなりましたFileListhttps://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 に答える