[英]Is the FormData object available in Internet Explorer 10?
我正在编写一个小的JavaScript应用程序,允许我异步上传图像。
这个脚本在每个浏览器中都很棒,除了猜猜谁,Internet Explorer ......
所以我做的第一件事就是使用Ajax的AjaxForm插件为IE9版本创建一个后备版本,这非常有用!
这是JS脚本。
$("#Uploader").change(function(e){
var form = $("#UploaderForm");
form.trigger('submit');
$(this).attr('disabled','disabled');
e.preventDefault();
});
$("#UploaderForm").submit(function(e){
e.preventDefault();
e.stopPropagation();
var type="POST";var loading=$("#PhotoIsLoading");
if(windowApi === true){
var formData = new FormData($(this)[0]);
$.ajax({
url: url,
type: type,
xhr: function() {
myXhr = $.ajaxSettings.xhr();
if(myXhr.upload){ myXhr.upload.addEventListener('progress',progressHandlingFunction, false);}
return myXhr;
},
beforeSend: function(){loading.removeClass('isHidden_important');},
success: function(response){
jres = JSON.parse(response);
alert("Test ok, file uploaded");
},
error: function(response){console.warn(response);},
data: formData,
cache: false,
contentType: false,
processData: false
});
e.preventDefault();
}else{
$(this).ajaxSubmit({
url: url,
dataType: 'json',
type: type,
beforeSubmit: function(){loading.removeClass('isHidden_important');$(this).formSerialize();},
success:function(response){
jres = JSON.parse(response);
alert("FallbackTest Complete");
},
error: function(response){console.warn(response);},
});
e.preventDefault();
return false;
}
});
WindowApi
和所有其他变量都在全局脚本中定义,但不用担心,它们可以工作。 确切地说, WindowApi
是这样的:
var windowApi=true;
if(window.File&&window.FileReader&&window.FileList&&window.Blob){
console.log("window.api ready");windowApi=true;}
else{console.log("window.api not ready");windowApi=false;};
所以,通过这一堆代码,我处理每个浏览器和IE9浏览器......
现在的问题是IE10,因为它有所有的window.*
方法,它可以使用FormData
对象。 但是当我尝试使用IE10和FormData上传内容时,我收到了formData对象的“Access Is Denied”错误。
此过程涉及的HTML是:
<form name="UploaderForm" id="UploaderForm" method="post" enctype="multipart/form-data">
<input type="file" name="Uploader" id="Uploader" accept="image/*" tabindex="1" />
</form>
所以最后我的问题是:
在尝试访问FormData对象时,如何避免在IE10中出现“拒绝访问”异常?
https://stackoverflow.com/a/13657047/641293和https://stackoverflow.com/a/4335390/641293可能会有用。 对于使用<input type='file'>
编程方式执行的操作,IE非常严格。
基于第一个,是否更改了第一行来修复这个问题?
$("#Uploader").on('click', function(e){ /* rest of the function unchanged... */
当您提交包含已被javascript搞乱的字段的表单时,您将获得拒绝访问权限。 您在uploadfield上动态添加了disabled
属性,这可能是您收到Access denied
的原因。 也许你应该在change
事件中没有禁用该字段的情况下试一试?
顺便说一句,您可能最好结合File API
检查FormData
的可用性:
var formDataSupport = false;
if (typeof FormData === 'function' &&
window.File &&
window.FileReader &&
window.FileList &&
window.Blob)
{
console.log("File API available, formData available");
formDataSupport = true;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.