Javascript 在IE9中将用户指定的文件作为字符串读取

Javascript 在IE9中将用户指定的文件作为字符串读取,javascript,jquery,file,html,internet-explorer-9,Javascript,Jquery,File,Html,Internet Explorer 9,我使用HTML5文件API为用户创建了一种机制,让用户从计算机中选择一个文件,然后将其读取为字符串并在应用程序中进行处理。然而,这段代码在IE9中不起作用,所以我正在寻找一个能起作用的解决方案。这是我的代码,它创建了一个文件读取器对象: function CreateFileReader(element) { var self=this; // create an input field and insert it into the document thi

我使用HTML5文件API为用户创建了一种机制,让用户从计算机中选择一个文件,然后将其读取为字符串并在应用程序中进行处理。然而,这段代码在IE9中不起作用,所以我正在寻找一个能起作用的解决方案。这是我的代码,它创建了一个文件读取器对象:

function CreateFileReader(element)
{
    var self=this;  

    // create an input field and insert it into the document    
    this.element=element;
    this.element.html('');
    var fileBox=$('<input type="file"/>');
    this.element.append(fileBox);

    // when the contents (file) of the fileBox change, read the file    
    this.fileBox.change(function () {   
        if (this.files.length > 0){
            if (this.files[0]!=undefined) {
                var file=this.files[0];
                // set up the file reader
                var reader = new FileReader();
                reader.file=file;
                // specify what happens when the file is loaded
                reader.onloadend = self.processFile;

                // read the file as a text string
                reader.readAsText(file);
            }
        }
    });
}

CreateFileReader.prototype.processFile = function(e) {
    // if the file was loaded successfully
    if (e.target.error==null && e.target.readyState==2) {
        var fileString=e.target.result;
        // do some stuff with fileString here
    }
}
函数CreateFileReader(元素)
{
var self=这个;
//创建一个输入字段并将其插入文档
这个元素=元素;
this.element.html(“”);
var fileBox=$('');
this.element.append(fileBox);
//当文件盒的内容(文件)更改时,读取文件
this.fileBox.change(函数(){
如果(this.files.length>0){
if(this.files[0]!=未定义){
var file=this.files[0];
//设置文件读取器
var reader=new FileReader();
reader.file=文件;
//指定加载文件时发生的情况
reader.onloadend=self.processFile;
//将文件作为文本字符串读取
reader.readAsText(文件);
}
}
});
}
CreateFileReader.prototype.processFile=函数(e){
//如果文件加载成功
if(e.target.error==null&&e.target.readyState==2){
var fileString=e.target.result;
//在这里使用fileString做一些事情
}
}

如果您能建议在IE9中工作的替代方案,我将不胜感激。

您可以使用silverlight后备方案

Javascript:

    if (!window.FileReader)
    {
        content.innerHTML = 
            '<div style="width: 20em; height: 3em;">' +
            '<object id="silverlightFallback" data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">' +
            '    <param name="source" value="ClientBin/SilverlightFallback.xap"/>' +
            '    <param name="background" value="white" />' +
            '    <param name="minRuntimeVersion" value="4.0.50826.0" />' +
            '    <param name="autoUpgrade" value="true" />' +
            '    <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=4.0.50826.0" style="text-decoration:none">' +
            '        <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style:none"/>' +
            '    </a>' +
            '</object>' +
            '</div>';

        var script = document.createElement("script");
        var silverlightFallback = document.getElementById("silverlightFallback");

        silverlightFallback.OnLoad = function () {
            silverlightFallback.content.FileReader.RegisterCallback(function (arr) { alert(arr); });
        };

        script.setAttribute("type", "text/javascript");
        script.setAttribute("src", "Silverlight.js");

        document.getElementsByTagName("head")[0].appendChild(script);
    }
相关:和
public partial class MainPage : UserControl
{
    private FileReaderFallback _reader = new FileReaderFallback();

    public MainPage()
    {
        InitializeComponent();

        HtmlPage.RegisterScriptableObject("FileReader", _reader);
    }

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        _reader.OpenFile();
    }
}

[ScriptableType]
public class FileReaderFallback
{
    private ScriptObject _callback;

    [ScriptableMember]
    public void RegisterCallback(ScriptObject callback)
    {
        _callback = callback;
    }

    public void OpenFile()
    {
        var dialog = new OpenFileDialog() { Multiselect = false };
        var result = dialog.ShowDialog();

        if (result == true)
        {
            ScriptObject arr = HtmlPage.Window.CreateInstance("Array");

            using (var s = dialog.File.OpenRead())
            {
                byte[] buffer = new byte[1024];
                int count;

                while ((count = s.Read(buffer, 0, buffer.Length)) > 0)
                {
                    Array.ForEach(buffer, b => arr.Invoke("push", (int)b));
                }
            }

            if (_callback != null)
                _callback.InvokeSelf(arr);
        }
        else
        {
            if (_callback != null)
                _callback.InvokeSelf();
        }
    }
}