【发布时间】:2011-11-18 06:56:09
【问题描述】:
我正在尝试使用 JavaScript 创建一个文本文件,我知道可以使用 ActiveX 对象,但它只在 IE 浏览器上运行良好。
我的要求是使用 JavaScript 为 Safari 浏览器生成一个文本文件?
谁能在这方面帮助我?
【问题讨论】:
-
老兄向我们提供您的代码,以便我们提供帮助.....
标签: javascript file browser safari
我正在尝试使用 JavaScript 创建一个文本文件,我知道可以使用 ActiveX 对象,但它只在 IE 浏览器上运行良好。
我的要求是使用 JavaScript 为 Safari 浏览器生成一个文本文件?
谁能在这方面帮助我?
【问题讨论】:
标签: javascript file browser safari
另一种方法是使用Blob 和URL.createObjectURL。包括 Safari 6+ 在内的所有最新浏览器都支持它们。
var textFile = null,
makeTextFile = function (text) {
var data = new Blob([text], {type: 'text/plain'});
// If we are replacing a previously generated file we need to
// manually revoke the object URL to avoid memory leaks.
if (textFile !== null) {
window.URL.revokeObjectURL(textFile);
}
textFile = window.URL.createObjectURL(data);
// returns a URL you can use as a href
return textFile;
};
这是一个example,它使用这种技术从textarea 保存任意文本。
关于该示例的另一点需要注意的是,我在下载链接上使用了download attribute。不幸的是,Safari 目前不支持它。但是在浏览器中,文件将在单击时自动下载,而不是在浏览器中打开文件。此外,由于我将download 属性设置为info.txt,因此将使用该名称而不是createObjectURL 生成的随机名称下载文件。
【讨论】:
在 JavaScript 中,您可以使用以下行来要求用户保存文本文件:
window.open("data:text/json;charset=utf-8," + escape("Ur String Object goes here"));
前段时间我在一些流行的浏览器中对此进行了测试,但请检查它是否适用于 Safari。
【讨论】:
您可以使用以下函数来创建和下载一个txt文件:
const initDownload = (function () {
const a = document.createElement('a')
document.body.appendChild(a)
// @ts-ignore
a.style = 'display: none'
return function (data: string, fileName: string, fileHeader) {
a.href = fileHeader + data //Image Base64 Goes here
a.download = fileName //File name Here
a.click() //Downloaded file
}
}())
initDownload(
'content of file',
'filename.txt',
'data:text/json;charset=utf-8,'
)
【讨论】:
但我的要求是使用 javascript 生成一个文本文件 Safari浏览器
由于安全限制,普通 JavaScript 无法做到这一点。但是,您可以使用服务器端 JavaScript,例如 Node.JS 或 Ajax 或其他一些服务器端技术。
【讨论】: