浏览器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中设计和测试了它,所以从来没有在其他任何地方测试过它 想法?解决方案 谢谢! 约翰浏览器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中没
函数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.');
}
}