2010-03-22 38 views
13

Tôi đang viết một số mã Javascript tạo một tài liệu XML trong ứng dụng khách (qua Google Earth plugin). Tôi muốn người dùng có thể nhấp vào nút trên trang và được nhắc lưu XML đó vào tệp mới. Nếu tôi đã tạo ra phía máy chủ XML, điều này sẽ dễ dàng, chỉ cần làm cho nút mở liên kết. Nhưng XML được tạo ra phía máy khách.Làm cách nào để tự động tạo tài liệu để tải xuống trong Javascript?

Tôi đã tìm ra một vài cú hích làm việc nửa, lấy cảm hứng một phần bởi this StackOverflow question. Nhưng không hoàn toàn làm việc. Dưới đây là một bản demo HTML có mã nhúng:

<html><head><script> 
function getData() { return '<?xml version="1.0" encoding="UTF-8"?><doc>Hello</doc>'; } 
function dlDataURI() { 
    window.open("data:text/xml;charset=utf-8," + getData()); 
} 
function dlWindow() { 
    var w = window.open(); 
    w.document.open(); 
    w.document.write(getData()); 
    w.document.close(); 
} 
</script><body> 
<div onclick="dlDataURI()">Click for Data URL</div> 
<div onclick="dlWindow()">Click for Window</div> 
</body></html> 

Phiên bản dlDataURI() hoạt động tốt trong Firefox, kém trong Chrome (không thể lưu) và hoàn toàn không có trong IE. Phiên bản Window() hoạt động OK trong Firefox và IE và không tốt trong Chrome (không thể lưu, XML được nhúng bên trong HTML). Cả hai phiên bản đều không nhắc người dùng tải xuống, nó luôn mở một cửa sổ mới đang cố gắng hiển thị XML.

Có cách nào tốt để làm những gì tôi muốn trong Javascript phía khách hàng không? Tôi muốn điều này hoạt động trong các trình duyệt hiện nay, lý tưởng nhất là Firefox, MSIE 8 và Chrome.

Cập nhật với mẫu mã Downloadify

window.onload = function() { 
    Downloadify.create("dlify", { 
    data: getData(), 
    filename: "data.xml", 
    swf: 'media/downloadify.swf', 
    downloadImage: 'images/download.png', 
    width: 100, height: 30});}; 
+0

này mới hơn Stack Overflow câu hỏi có nhiều câu trả lời mà không cần Flash. Hầu hết liên quan đến việc xây dựng 'dữ liệu:' URL trong DOM. https://stackoverflow.com/questions/19721439/download-json-object-as-a-file-from-browser – Nelson

Trả lời

5

Điều tốt nhất tôi đã nhìn thấy như xa là Downloadify bởi Doug Neiner, nó đòi hỏi Flash, nhưng hoạt động rất tốt:

"Một tí hon Javascript + Thư viện Flash cho phép tạo và lưu các tệp một cách nhanh chóng, trong trình duyệt mà không cần tương tác với máy chủ. "

Kiểm tra điều này video.

+1

Phải, một trình bao bọc xung quanh API được liên kết trong câu trả lời của tôi. Tốt đẹp. – spender

+0

Cảm ơn con trỏ, đó là một thư viện nhỏ tuyệt vời. Giấy phép phần mềm miễn phí, tương đối dễ sử dụng. Xấu hổ nó đòi hỏi Flash, nhưng tôi không ngạc nhiên nếu Javascript không thể đối phó. Lưu ý: bản tải xuống được lưu vào đĩa bằng Flash, nó không đi qua trình quản lý tải xuống của trình duyệt. Tôi sẽ cập nhật câu hỏi của mình bằng đoạn mã trình bày cách thư viện này hoạt động. – Nelson

+2

URL đó ở trên đã chết. Có vẻ như bạn có thể tìm thấy phần tải xuống trên github tại đây: https://github.com/dcneiner/Downloadify –

Các vấn đề liên quan