0

下面的代码来自 html5uploader,它适用于除 IE 10 之外的所有浏览器。我已尽力包含一个功能,其中检测到 IE 并读取删除的文件,但无法在 IE 中运行。

如何修改以下函数中的代码以包含 Internet Explorer 10?

完整的 Javascript 代码在这里。链接到上传者这里

    // Firefox 3.6, Chrome 6, WebKit
    if(window.FileReader) { 

        // Once the process of reading file
        this.loadEnd = function() {
            bin = reader.result;                
            xhr = new XMLHttpRequest();
            xhr.open('POST', targetPHP+'?up=true', true);
            var boundary = 'xxxxxxxxx';
            var body = '--' + boundary + "\r\n";  
            body += "Content-Disposition: form-data; name='upload'; filename='" + file.name + "'\r\n";  
            body += "Content-Type: application/octet-stream\r\n\r\n";  
            body += bin + "\r\n";  
            body += '--' + boundary + '--';      
            xhr.setRequestHeader('content-type', 'multipart/form-data; boundary=' + boundary);
            // Firefox 3.6 provides a feature sendAsBinary ()
            if(xhr.sendAsBinary != null) { 
                xhr.sendAsBinary(body); 
            // Chrome 7 sends data but you must use the base64_decode on the PHP side
            } else { 
                xhr.open('POST', targetPHP+'?up=true&base64=true', true);
                xhr.setRequestHeader('UP-FILENAME', file.name);
                xhr.setRequestHeader('UP-SIZE', file.size);
                xhr.setRequestHeader('UP-TYPE', file.type);
                xhr.send(window.btoa(bin));
            }
            if (show) {
                var newFile  = document.createElement('div');
                newFile.innerHTML = 'Loaded : '+file.name+' size '+file.size+' B';
                document.getElementById(show).appendChild(newFile);             
            }
            if (status) {
                document.getElementById(status).innerHTML = 'Loaded : 100%<br/>Next file ...';
            }
        }
4

1 回答 1

1

也许这可以帮助其他人,即使问题已为您解决:

1)确保你强制你的浏览器到 IE10 :<meta http-equiv="X-UA-Compatible" content="IE=edge">

2)不要使用reader.readAsBinaryString(file);reader.readAsDataURL(file);用于 IE

3) 发送 XHR 对象xhr.send而不使用btoa(只是做xhr.send((bin));

4) 通常,为了使您的代码与所有浏览器兼容,if (navigator.appName === "Microsoft Internet Explorer") { ... }请为每个浏览器使用和打开具有不同目标的 XHR 对象(如:) xhr.open('POST', targetPHP+'?up=true&browser=IE', true);,因为 PHP 会以不同方式处理 if。

一切都在这里解释:如何更改 html5uploader 中使用的 XmlHttpRequest 或 FileAPI 以支持 IE

于 2013-09-19T09:01:38.593 回答