Chcę zapisać obiekt JSON do pliku w kliencie, aby utrzymywać go na przyszłe użycie, próbowałem następującego

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

I to działa !! Problem Prosi użytkownika o lokalizację i nazwę pliku do zapisywania. Chcę, żeby użytkownik był całkowicie nieświadomy faktu, że coś jest zapisywane w przyszłości użycie lub co najmniej trzymaj go do minimalnego możliwego kliknięcia.

Jak mogę podać nazwa pliku i lokalizację statycznie w window.open()?

Z góry dziękuję,

EDYTUJ

Aby wyjaśnić, że "nie przechowuję arbitralnych lub niechcianych danych. Wszyscy użytkownicy są zarejestrowani użytkownicy systemu". W normalnych warunkach nie przechowuję niczego lokalnie. Chcę jednak przechowywać niektóre obiekty JSON, jeśli sieć nie była dostępna w momencie zgłoszenia formularza.

Jednym oczywistym rozwiązaniem będzie użycie plików cookie. Ponieważ pliki cookie można przypadkowo usunąć z powodu ustawień przeglądarki użytkownika. Potrzebuję sposobu na utrzymanie danych, aż sieć stanie się dostępna. Będzie większy, aby mieć wsparcie przeglądarki krzyżowej.

5
Amit 10 listopad 2011, 18:21

6 odpowiedzi

Najlepsza odpowiedź

Chcę, aby wartości wsparcia przeglądarki, nawet jeśli użytkownik zmienia przeglądarkę, którą powinien być w stanie kontynuować, skąd wyszedł. Składam informacje w obiektach JSON.

Myślę, że użytkownicy nie oczekują aplikacji internetowej, aby udostępnić informacje o innych przeglądarkach w ten sam sposób. Wątpliwie wątpliwości, że wielu użytkowników zmienia ich przeglądarkę zbyt często, aby gwarantować taką funkcję inwazyjną prywatność. Powinieneś rozważyć przechowywanie informacji na serwerze (zmuszając użytkownika do rejestracji lub korzystania z wspólnych kont, takich jak OpenID, Google, Facebook itp.) Lub po stronie klienta, ustawiając plik cookie lub przy użyciu wspomnianych technologii pamięci masowej.

Jeśli naprawdę chcesz ograniczyć przechowywane informacje do przeglądarek na tej samej maszynie, a nie chcesz zezwalać na dostęp przez tego samego użytkownika na różnych maszynach, możesz przyjrzeć się w LSO (" Flash Cookies "), które wydają się być zapisywane niezależnie od przeglądarki. Nie potrzebujesz potwierdzenia użytkownika do przechowywania LSO.

Aktualizacja: Flash nie jest obsługiwany przez przeglądarki, jak kiedyś i nie są szeroko stosowane w dzisiejszych czasach, więc LSO nie jest już dobrej opcji.

2
kapex 4 październik 2017, 09:41

Jeśli chcesz przetrzymać dane, użyj API magazynowe, nie możesz grać w gry z systemem plików użytkownika.

7
Quentin 10 listopad 2011, 14:22

Nie możesz tego zrobić, jest to kwestia bezpieczeństwa po stronie klienta.

4
Gfox 10 listopad 2011, 14:23

Systemy plików API jest częścią specyfikacji HTML5 i możliwe jest dostęp do systemu plików w piaskownicy na określoną witrynę w nowoczesnych przeglądarkach, oto dobre samouczek: http://www.html5rocks.com/en/tutors/file/filesystem/< \ t A >.

Jednak poszedłbym z API LocalStorage w tej sprawie, która ma lepszą obsługę przeglądarki: http://www.w3schools.com/html5/html5_webstorage.asp

2
Kamyar Nazeri 11 listopad 2011, 08:38

FSO.JS Okłada tymczasowe / trwałe API systemu plików i pozwoli Ci łatwo odczytać / zapisywane pliki ... obsługiwane przez Chrome W tej chwili, ale spec robi się szybko. :)

2
kwh 8 marzec 2014, 18:37

Jak już wspomniano w komentarzach, nie jest to możliwe bez wyraźnej zgody użytkownika z oczywistych powodów bezpieczeństwa. Jednak, jak wspomniano również w komentarzach, Shoudl / mogłaby przechowywać informacje w pliku cookie, które będą wtedy odzyskiwać, gdy użytkownik powróci.

Coś takiego zrobiłoby to

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

Oczywiście czas wygaśnięcia będzie tak długo, jak potrzebujesz informacji do utrzymywania.

Mam nadzieję, że to pomoże

1
olly_uk 10 listopad 2011, 14:28