浏览器javascript和XSL的最新变化

浏览器javascript和XSL的最新变化,javascript,firefox,xslt,dom,cross-browser,Javascript,Firefox,Xslt,Dom,Cross Browser,以下内容曾在Firefox3.5.x和3.6.x上使用,但在Firefox11.x或Safari 5.1.x中不再使用。Javascript不是我的专长,所以我无法跟上最近的变化 具体地说,Browse按钮显然仍然“成功”加载了一个文件(该文件应该是从FCP导出的XML序列,尽管未经验证),但按下Process按钮后,XSLT的结果不再像以前的浏览器版本那样显示在“output”DIV中 这一点可以在下面的上下文中看到 用于测试的适当示例XML文件位于 html、javascript或xsl中没

以下内容曾在Firefox3.5.x和3.6.x上使用,但在Firefox11.x或Safari 5.1.x中不再使用。Javascript不是我的专长,所以我无法跟上最近的变化

具体地说,Browse按钮显然仍然“成功”加载了一个文件(该文件应该是从FCP导出的XML序列,尽管未经验证),但按下Process按钮后,XSLT的结果不再像以前的浏览器版本那样显示在“output”DIV中

这一点可以在下面的上下文中看到

用于测试的适当示例XML文件位于

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

想法?解决方案

谢谢! 约翰


函数jProcess(){
//使用漂亮的Firefox3 nsIDOMFile界面在本地获取文件内容
var file_contents=document.getElementById('xml_file').files.item(0).getAsText(“utf8”);
//强制转换/转换为XML文档
var parser=新的DOMParser();
xmlDoc=parser.parseFromString(文件内容,“text/xml”);
//XSLT转换
var xslt=document.implementation.createDocument(“,”,null);
xslt.async=false;
load(“jProcess.xsl”);
var进程=新的XSLTProcessor();
process.importStylesheet(xslt);
var结果=过程.transformToFragment(xmlDoc,文档);
//显示输出
document.getElementById('output').innerHTML=“”;
document.getElementById('output').appendChild(结果);
返回false;
};
为要处理为HTML的FCP序列选择XML文件。

我在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
因此,由于在输入type=“file”控件上公开的API发生了变化,代码不再工作,而该控件在
文件列表
中公开的
文件
对象也发生了变化。基于该方法,getAsText在Gecko/FF 7中被淘汰,以后可能会被删除。读取您现在应该使用的文件的内容。这似乎是一个进一步的异步API,因此您必须重新构造代码:(该示例适用于当前版本的Firefox、Opera和Chrome)

因此,使用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.');
  }
}

+1为了更好的解释,酷名“约翰·朝圣者”,并在作品中使用“受阻”一词。
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.');
  }
}