Internetexplorer-可靠的Javascript方法,用于在IE中对SaveAs对话框进行功能/对象检测
internet explorer - Reliable Javascript way to do feature/object detection for SaveAs dialog in IE
我正在寻找一个跨浏览器的解决方案来显示Javascript中的"另存为"对话框。我在以前的一个项目中一直使用这种方法,但它在IE 11中被破坏了(因为窗口.ActiveObject已经更改,IE 11现在滑入下面的第一个条件):
function saveFile(fileURL, fileName) {
if (!window.ActiveXObject) {
// Non-IE
var save = document.createElement('a');
save.href = fileURL;
save.target = '_blank';
save.download = fileName || fileURL;
var evt = document.createEvent('MouseEvents');
evt.initMouseEvent('click', true, true, window, 1, 0, 0, 0, 0,
false, false, false, false, 0, null);
save.dispatchEvent(evt);
(window.URL || window.webkitURL).revokeObjectURL(save.href);
} else if (document.execCommand) {
// IE
var _window = window.open(fileURL, "_blank");
_window.document.close();
_window.document.execCommand('SaveAs', true, fileName || fileURL)
_window.close();
}
}
我的理解是,IE团队这样做是为了防止使用这种方法进行浏览器检测。我可以使用其他类型的特征/对象检测使其再次工作吗。或者我可以(最好)删除条件语句,只为所有浏览器提供一段代码吗。当第一个条件在IE中运行时,我看到的错误是:
DOM7001:参数"url"无效。未能吊销Blob URL:"[URL…]"。
文件:localhost:8080
我知道浏览器检测是一种选择(例如,像WhichBrowser),但即使是它的作者也警告说,功能/对象检测确实是一种方法。
我认为在HTML正文中嵌入一个隐藏的iFrame并让JS将iFrame的src设置为URL可能是更好的解决方案。一旦设置了src,如果src URL希望它(例如),它将立即触发"另存为"对话框
<body>
...
...
<iframe style="display:none" id="hidden-iframe"></iframe>
</body>
而且。。。
document.getElementById("hidden-iframe").src = myURL;
到目前为止,我检查过的所有浏览器似乎都能工作,包括IE(惊叹!)。
只有我的2美分,但您发布的问题实际上是如何测试链接下载支持。由于您实际上并没有使用ActiveX,因此不应该使用它来检测该功能。它离针对用户代理进行测试不远了。
相反,请验证锚点的下载属性不是字符串类型(在三叉戟浏览器中不会是字符串类型)。然后执行你的IE"另存为"代码。
我目前遇到的问题只是唤起文档。execCommand("SaveAs")100%的时间都在崩溃IE 11。
如果您正在IE中查找类似的内容,则可能需要尝试使用msSaveBlob
。
- 着色引导框对话框
- 文本框不是从Javascript/Asp.net中的对话框中打印出来的
- CKeditor:更改对话框中的默认选择选项
- 搜索api在mac上显示对话框
- 使用密码对话框Javascript请求帮助
- CKEditor v4:自制插件中对话框的动态标题
- 删除确认对话框在第一次单击时不起作用
- 使用jquery对话框中的箭头键
- 获取打开jquery对话框的button的id
- 是否可以用JavaScript显示等效的文件夹对话框
- 我怎么能让jQuery对话框表现得像Javascript警报
- 如何在页面重新加载时显示jquery ui对话框
- 打开相对于鼠标位置的CSS3/HTML5模式对话框
- javascript确认对话框有时会不断出现
- 如何为javascript方法放入jquery确认对话框
- Jquery UI对话框不会消失
- 如何从自定义对话框编辑数据网格中的选定行
- OnsenUI、Angular和在警报对话框后刷新UI组件
- jQuery UI对话框错误,按钮导致HierarchyRequestError
- Internetexplorer-可靠的Javascript方法,用于在IE中对SaveAs对话框进行功能/对象检测