2012-07-05 11 views
33

Làm cách nào để trình duyệt hiển thị "lưu dưới dạng hộp thoại" để người dùng có thể lưu nội dung của chuỗi vào một tệp trên hệ thống của mình?Cách làm cho trình duyệt hiển thị "lưu dưới dạng hộp thoại" để người dùng có thể lưu nội dung của chuỗi vào một tệp trên hệ thống của mình?

Ví dụ:

var myString = "my string with some stuff"; 
save_to_filesystem(myString,"myString.txt"); 

Hệ quả là một cái gì đó như thế này:

Example

+0

Bạn sẽ tìm thấy câu trả lời ở đây: http://stackoverflow.com/questions/2897619/using-html5-javascript-to-generate-and-save-a-file – demux

+0

@ArnarYngvason là quá trình này giống như khi thực hiện điều này trong angularjs? – bleykFaust

+1

@bleykFaust, quy trình này giống nhau trên tất cả các ứng dụng js giao diện người dùng. – demux

Trả lời

24

Trong trường hợp bất cứ ai vẫn đang tự hỏi ...

tôi đã làm nó như thế này:

<a href="data:application/xml;charset=utf-8,your code here" download="filename.html">Save</a>

không thể nhớ nguồn của tôi, nhưng nó sử dụng các kỹ thuật \ tính năng sau:

  1. html5 tải thuộc tính
  2. dữ liệu uri của

Tìm thấy tài liệu tham khảo:

http://paxcel.net/blog/savedownload-file-using-html5-javascript-the-download-attribute-2/


EDIT: Như bạn có thể thu thập từ các ý kiến ​​này không KHÔNG làm việc trong

  1. Internet Explorer (công trình tại Edge v13 dù)
  2. Safari
  3. iOS Safari
  4. Opera Mini
  5. Trình duyệt Android (4.3 và thấp hơn)

http://caniuse.com/#feat=download

-5

Sử dụng execComand:

<input type="button" name="save" value="Save" onclick="javascript:document.execCommand('SaveAs','true','your_file.txt')"> 

Trong liên kết tiếp theo: execCommand

+1

Rất tiếc, 'SaveAs' không phải là lệnh được xác định. – Sablefoste

6

Có một thư viện javascript cho điều này, xem

Tuy nhiên, saveAs() hàm sẽ không gửi chuỗi tinh khiết cho trình duyệt, bạn cần phải chuyển nó sang blob:

function data2blob(data, isBase64) { 
    var chars = ""; 

    if (isBase64) 
    chars = atob(data); 
    else 
    chars = data; 

    var bytes = new Array(chars.length); 
    for (var i = 0; i < chars.length; i++) { 
    bytes[i] = chars.charCodeAt(i); 
    } 

    var blob = new Blob([new Uint8Array(bytes)]); 
    return blob; 
} 

và sau đó gọi saveAs trên blob, như như:

var myString = "my string with some stuff"; 
saveAs(data2blob(myString), "myString.txt"); 

Tất nhiên nhớ để bao gồm thư viện javascript được đề cập ở trên trên trang web của bạn bằng cách sử dụng <script src=FileSaver.js>

+4

Thao tác này chỉ lưu "myString.txt" vào thư mục Tải xuống của tôi mà không hiển thị hộp thoại. – meetar

+0

Ahh, không tôi không! Tất cả đều tự động lưu. Vì vậy, đây luôn là một tính năng cho mỗi trình duyệt, hoặc có cách nào để kích hoạt hành vi bằng một tập lệnh không? – meetar

+4

Tôi tin rằng đó là tính năng cho mỗi trình duyệt. Trong chrome, bạn đặt nó trong cài đặt, cài đặt nâng cao, hộp kiểm "Hỏi vị trí lưu từng tệp trước khi tải xuống" –

9

Điều này có thể thực hiện việc triển khai javascript qua trình duyệt chéo này của chức năng HTML5 saveAs: https://github.com/koffsyrup/FileSaver.js

Nếu tất cả những gì bạn muốn làm là lưu văn bản thì kịch bản trên hoạt động trong tất cả các trình duyệt (bao gồm tất cả các phiên bản của IE), không sử dụng gì ngoài JS.

+3

nó buộc tải xuống trên trình duyệt, nó không bật hộp thoại lưu – user889030

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