2011-11-10 54 views
5

tôi muốn lưu một đối tượng JSON vào một tập tin ở khách hàng để tồn tại nó để sử dụng trong tương lai, tôi đã cố gắng sau dòngCách lưu tệp ở phía máy khách bằng JavaScript?

window.open("data:text/json;charset=utf-8," + escape(JSON.stringify(obj)));

và nó hoạt động !! Vấn đề nó yêu cầu người dùng vị trí và tên của tệp để lưu. Những gì tôi muốn là tôi muốn người dùng hoàn toàn không biết thực tế là một cái gì đó đang được lưu lại để sử dụng trong tương lai hoặc ít nhất giữ nó để tối thiểu người dùng có thể nhấp chuột.

Tôi làm cách nào để cung cấp tên và địa chỉ và vị trí tĩnh trong window.open()?

Cảm ơn trước,

EDIT

Chỉ cần để làm cho nó rõ ràng rằng: "Tôi không lưu trữ dữ liệu tùy ý hoặc không mong muốn. Tất cả người dùng đang sử dụng của hệ thống đăng ký." Trong điều kiện bình thường, tôi không lưu trữ bất cứ thứ gì cục bộ. Tuy nhiên tôi muốn lưu trữ một số đối tượng JSON nếu mạng không có sẵn tại thời điểm gửi biểu mẫu.

Một giải pháp hiển nhiên sẽ là sử dụng cookie. Vì Cookies có thể vô tình bị xóa do cài đặt trình duyệt của người dùng. Tôi cần một cách để duy trì dữ liệu cho đến khi mạng có sẵn. Sẽ tốt hơn nếu có hỗ trợ trình duyệt chéo.

+4

Java không phải là JavaScript. Họ là những ngôn ngữ hoàn toàn riêng biệt. – Pointy

+0

Ngoài ra, bạn không thể chỉ buộc các tệp được lưu trên máy khách từ môi trường trình duyệt. Đó là một biện pháp bảo mật khá rõ ràng. – Pointy

+0

@Kapep Tôi muốn các giá trị hỗ trợ trình duyệt chéo, ngay cả khi người dùng thay đổi trình duyệt anh/cô ấy sẽ có thể tiếp tục từ nơi anh ấy rời đi. Tôi đang lưu trữ thông tin trong các đối tượng JSON. – aProgrammer

Trả lời

2

Tôi muốn các giá trị cho hỗ trợ qua trình duyệt, ngay cả khi người dùng thay đổi trình duyệt anh/cô ấy sẽ có thể tiến hành từ nơi ông rời. Tôi đang lưu trữ thông tin trong các đối tượng JSON.

Tôi nghĩ người dùng không mong đợi ứng dụng web chia sẻ thông tin với các trình duyệt khác trên cùng một máy theo cách này. Ngoài ra, tôi nghi ngờ nhiều người dùng thay đổi trình duyệt của họ quá thường xuyên để đảm bảo tính năng riêng tư xâm lấn như thế này. Bạn nên cân nhắc lưu trữ thông tin trên máy chủ của mình (bằng cách buộc người dùng đăng ký hoặc sử dụng các tài khoản phổ biến như OpenID, Google, Facebook, v.v.) hoặc ở phía khách hàng bằng cách đặt cookie hoặc sử dụng các công nghệ lưu trữ được đề cập.

Nếu bạn thực sự muốn giới hạn thông tin được lưu trữ cho trình duyệt trên cùng một máy và không muốn cho phép cùng một người dùng truy cập trên các máy khác nhau, bạn có thể xem LSO ('Cookie flash') để được lưu độc lập với trình duyệt. Bạn không cần bất kỳ xác nhận người dùng nào để lưu trữ LSO.

Cập nhật: Flash không được trình duyệt hỗ trợ như trình duyệt đã từng sử dụng và hiện không được sử dụng rộng rãi, vì vậy, LSO không phải là một lựa chọn tốt nữa.

+0

người dùng sẽ là người dùng đã đăng ký của trang web của tôi ... và tôi lưu trữ dữ liệu chỉ khi có tạm thời không có mạng là awailable .. cho tất cả các trường hợp khác (tức là khi mạng có sẵn) Tôi không lưu trữ bất cứ điều gì .... anyways Cảm ơn .. – aProgrammer

7

Nếu bạn muốn lưu dữ liệu, sau đó sử dụng a storage API, bạn không thể chơi trò chơi với hệ thống tệp của người dùng.

+1

+1, cũng thử [store.js] (https://github.com/marcuswestin/store.js) - trình bao bọc localStorage. – Daniel

4

Bạn không thể làm điều đó, đó là câu hỏi về bảo mật ở phía khách hàng.

1

Như đã được đề cập trong các nhận xét, điều này là không thể nếu không có sự đồng ý rõ ràng của người dùng vì lý do bảo mật rõ ràng. tuy nhiên, cũng như được đề cập trong các nhận xét, bạn shoudl/có thể lưu trữ thông tin trong một cookie mà sau đó sẽ có thể truy xuất được khi người dùng trả về.

một cái gì đó như thế này sẽ làm điều đó

document.cookie="cookie_name="+required_value+"; expires=Monday, 04-Dec-2011 05:00:00 GMT"; 

rõ ràng là hết hạn thời gian sẽ được miễn là bạn cần thông tin để tồn tại.

hy vọng rằng sẽ giúp

+0

Tôi có giá trị trong cookie .. thực sự đó là cookie mà tôi đang viết (hoặc cố gắng viết) trong một tệp cho trường hợp người dùng thay đổi trình duyệt lần sau hoặc xóa cookie ... – aProgrammer

2

FileSystem API phần của HTML5 spec và nó có thể truy cập vào hệ thống tập tin trong một sandbox cho một trang web nào đó trong các trình duyệt hiện đại, đây là một hướng dẫn tốt: http://www.html5rocks.com/en/tutorials/file/filesystem/

Tuy nhiên tôi sẽ đi với LocalStorage API cho rằng vấn đề trong đó có hỗ trợ trình duyệt tốt hơn: http://www.w3schools.com/html5/html5_webstorage.asp

+0

"The API hệ thống tệp mà dự án này dựa trên đã không được chấp nhận và không còn được hỗ trợ bởi hầu hết các trình duyệt chính. Kho lưu trữ này chỉ tồn tại cho mục đích lưu trữ. " https://github.com/keithwhor/FSO.js/ –

2

FSO.js kết thúc tốt đẹp/dai dẳng FileSystem API tạm thời và sẽ cho phép bạn dễ dàng đọc/ghi tập tin ... chỉ được hỗ trợ bởi Chrome ngay bây giờ, nhưng spec là đến cùng Nhanh. :)

+0

"API hệ thống tệp mà dự án này dựa trên đã không được chấp nhận và không còn được hỗ trợ bởi hầu hết các trình duyệt chính. Kho lưu trữ này chỉ tồn tại cho mục đích lưu trữ." https://github.com/keithwhor/FSO.js/ –

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