Javascript IE9提示用户提交隐藏的iFrame
我正在调试我们的文件上传脚本,它在不支持通过XMLHttpRequest对象发送文件数据的浏览器中使用隐藏的iframe 关于在IE中提交iframe有大量的文章和问题;(如,和),但他们都引用了IE不会为您正确设置“name”属性的事实 下面的代码生成了一个表单,其目标设置为iFrame的名称,但在提交表单时,IE9仍会提示我“是否要打开或保存photo\u upload.json?”,而不是将其加载到iFrame中Javascript IE9提示用户提交隐藏的iFrame,javascript,jquery,iframe,Javascript,Jquery,Iframe,我正在调试我们的文件上传脚本,它在不支持通过XMLHttpRequest对象发送文件数据的浏览器中使用隐藏的iframe 关于在IE中提交iframe有大量的文章和问题;(如,和),但他们都引用了IE不会为您正确设置“name”属性的事实 下面的代码生成了一个表单,其目标设置为iFrame的名称,但在提交表单时,IE9仍会提示我“是否要打开或保存photo\u upload.json?”,而不是将其加载到iFrame中 var $iframe = $("<iframe id='" + id
var $iframe = $("<iframe id='" + id + "' name='" + id + "' />");
$('body').append($iframe);
$iframe.load(function () {
console.log("loaded"); // this never happens in IE9
});
// pretend this form also has a file input object that gets populated
var $form = $('<form />').attr({
method: "post",
enctype: "multipart/form-data",
action: "/photo_upload.json",
target: id
});
$('body').append($form);
$form.submit();
当表单从iframe提交时,我会传递一个额外的参数,因此无论照片上传是AJAX请求还是隐藏的iframe,我都可以使用相同的服务器端函数
在后一种情况下,正如@Kolink所建议的,这将从iFrame中获取JSON:
$iframe.load(function () {
json_string = iframe[0].contentDocument.body.innerHTML;
});
photo_upload.json
正在下载到iframe中,但由于浏览器不知道如何处理它,因此它假定它是一个要下载的文件
理想情况下,您应该让iframe接收HTML数据,其中可能包含一个
来告诉父窗口要做什么。或者,如果您在父级中已经有代码来处理接收响应(看起来您是这样做的),则在响应上设置内容类型:text/html
,以强制浏览器将其视为html文档-它将自动添加基本内容,如
标记和
标记,所以只要访问iframe.contentDocument.body.innerHTML就可以了!感谢您的清晰解释,非常感谢,我也很高兴能够真正理解它失败的原因。请注意,“文本/普通”的内容类型也可以,尽管IE会将内容包装在
标记中。
$iframe.load(function () {
json_string = iframe[0].contentDocument.body.innerHTML;
});