我有click()来自jquery 的-function 的问题.我创建了一个<a>-element,document.createElement('a')并希望调用click()关于这个元素的-function.关于这个元素,我想创建一个Excel文件并将其保存在桌面上.
我的代码:
$('body').on('click', '#test', function(event) {
var link = document.createElement('a');
link.download = 'test.xls';
link.href = 'data:application/vnd.ms-excel;utf-8,test';
link.click();
});
Run Code Online (Sandbox Code Playgroud)
此功能在chrome下运行,但不在Firefox下运行.
有谁知道为什么那不起作用?
这是我的下载代码:
var mimeType = this.getMime(obj);
var ab = this.base64ToArrayBuffer(obj[key]);
var blob = new Blob([ab.buffer], {
type : mimeType
});
var result = this.bintostring(blob);
var url = window.URL.createObjectURL(blob);
var a = document.createElement('a');
a.href = url;
a.download = result.filename;
a.target = '_blank';
a.click();
window.URL.revokeObjectURL(url);
Run Code Online (Sandbox Code Playgroud)
在调试过程中,我没有看到任何异常.
我的Angular 1.5应用程序通过REST连接到Java/Tomcat/Spring后端服务器.
一个REST服务生成PDF并将其发送到客户端.它在DEsktop浏览器(至少是FF,Chrome)上工作正常但我无法在iOS(例如ipad)上看到PDF内容,无论我使用哪种浏览器(Chrome,Safari ..)
这是Angular代码:
$http.get("/displayPdf", {responseType: 'arraybuffer', params: {id: 1}}).
success(function(data) {
var blob = new Blob([data], {type 'application/pdf'});
var objectUrl = window.URL.createObjectURL(blob);
window.open(objectUrl);
}
);
Run Code Online (Sandbox Code Playgroud)
Spring/Jax-RS代码是:
@GET
@Path("displayPdf")
@Produces("application/pdf")
Response displayPdf(@QueryParam("id") Long id) {
byte[] bytes = service.generatePdf();
return javax.ws.rs.core.Response.ok().
entity(bytes).
header("Content-Type", "pdf").
header("Content-Disposition", "attachment; filename='test.pdf'").
build();
}
Run Code Online (Sandbox Code Playgroud)
我在这里完成了我的研究(例如AngularJS:在角应用程序中显示blob(.pdf))但找不到合适的解决方案.
所以,请问您应该怎么做才能将生成的PDF显示给我的iPad/iPhone最终用户?
非常感谢
在 Javascript 中,我正在创建许多 Blob,我想提示用户将它们另存为文件。目前,我正在使用 来执行此操作URL.createObjectURL,将 URL 放入链接中,并模拟对该链接的单击。(当然,我调用URL.revokeObjectURL来释放 URL,以便在用户保存 Blob 后可以将其丢弃。)我有一个循环运行,并对我希望用户保存的每个 Blob 执行此操作。
至少在 Firefox 上,触发链接是一个异步操作;在用户选择保存文件的位置之前,我调用click()并生成其余 blob 的循环立即继续执行。
这会带来一些问题,因为每个斑点可能有点大,而且可能有很多。我可以很容易地预见到一种情况,即没有足够的内存来将它们全部保存在内存中等待用户将它们一一保存和释放。因此,我想生成一个 blob,让用户下载它,然后在保存文件后(因此有资格被垃圾收集器丢弃),继续生成下一个 blob 并让用户保存它。
有没有什么方法可以实现这一点,而不需要用户手动单击另一个按钮或类似的东西来向页面发出他已完成保存文件的信号?
目前使用FileReader打开并查看适用于Chrome的PDF.但是,当在Safari上打开pdf并单击下载按钮时,没有任何反应.
var reader = new FileReader();
reader.onloadend = function(e) {
$window.location.href = reader.result;
}
reader.readAsDataURL(file);
Run Code Online (Sandbox Code Playgroud) javascript ×4
firefox ×2
pdf ×2
angularjs ×1
blob ×1
click ×1
file ×1
filereader ×1
ios ×1
jquery ×1
mozilla ×1
safari ×1
save ×1
spring ×1
synchronous ×1