Pracuję nad projektem od kilku miesięcy i zbliżam się do końca. Jednym z ostatnich kroków jest dostarczenie pliku, który będzie wypełniony informacjami wygenerowanymi przez działania użytkownika podczas jego sesji. Can I write files with HTML5/JS? i odpowiedź ecmanauta bardzo mnie zbliżyła, ponieważ dostarczył dwie metody, jedną w czystym html5 i jedną za pomocą JavaScript.HTML5 JavaScript Pobierz atrybut
Najpierw użyłem metody JavaScript, która działa tylko w Chrome, a nie w Mozilli lub IE. Użyłem więc czystej metody html5 w połączeniu z alternatywnym JavaScriptem, aby wkleić go na stronę, aby można było kliknąć.
document.getElementById('download').innerHTML = '<a id="save" download="earth.txt" href="data:text/plain,mostly harmless and a bit more">Save</a>';
Kod ten tworzy plik, który zostanie pobrany, ale nie zawiera nowej linii którym wyrób powiedział był „ ”. Poszukiwałem więc, jakie kody innych znaków można rozpoznać. http://en.wikipedia.org/wiki/Newline dostarczył mi wiele możliwych wyborów, żaden z nich, których próbowałem, nie zadziałał. Te, które wypróbowałem to: "& # 10 ',' ',' & # 13 ',' ',' \ r \ n ',' \ r ',' \ n ',' \ cr ',' \ c \ r ', 0x0D, 0x0A, 0c0D0A. W wielu przypadkach usunięto znak nowej linii i nic się nie pojawiło.
Podczas testowania powyższego kodu działa w Mozilli i Chrome (bez nowej linii), ale wynik w IE jest inny. Po kliknięciu linku Zapisz, w rzeczywistości przechodzi do strony i zawiera adres URL jako zawartość danych.
Chociaż projekt może być akceptowalny bez działania tej funkcji, bardzo chciałbym, aby działało to po spędzeniu tak wiele czasu i wysiłku na tym i zbliżeniu się do niego. Też muszę przetestować to w Safari, ale jeszcze nie testowałem w tej przeglądarce. Wymagane wsparcie przeglądarki od najważniejszego do najmniejszego jest następujące: Mozilla, Chrome, Safari, IE. Jeśli to możliwe, chciałbym uniknąć specyficznego dla przeglądarki kodowania.
Należy również wspomnieć, że tak jak w pierwszym linku, nie chcę wysyłać do serwera, aby pobrać, potrzebuję go działającego lokalnie po stronie klienta bez interakcji serwera.
Podsumowując, potrzebuję przynajmniej uzyskać nową linię roboczą dla pliku, aby Mozilla i Chrome działały w pełni. I jeśli to możliwe, sposób, aby plik działał również w IE.
Edytowanie: 3 listopada 2014 13:40 czasu lokalnego Próbowałem sugerowanej edycji przez maths4js o zmianie wokół moich ofert, a sugestia nie działa. Przyszło mi do głowy, że przesłanie większej przykładowej strony kodu byłoby pomocnym pomysłem. Zasugerowano również, że sprawdzam, które przeglądarki obsługują tę funkcję. Wygląda na to, że IE i Safari tego nie robią, więc nie będę się teraz nimi przejmował, a może w przyszłości mają dla nich kodowanie zgodne z przeglądarką.
<!DOCTYPE HTML>
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><style>body{margin: 0px;padding: 0px;}</style></head><body><center><br><div id='download'></div></center>
<script>
function download(){
//var newline= '
'; //no line breaks
//var newline= ' '; //no line breaks
//var newline= " "; //no line breaks
//var newline= "
"; //no line breaks
//var newline= "\r\n"; //no line breaks
//var newline= "\r\n;"; //appends ; but no line breaks
//var newline = '\n'; //no line break
//var newline = '/n'; //completely failed
var newline = 0x0D0A;
var tab = " ";
var text = "Title of the document" + newline;
text += "Just a line of text : ";
text = text +"Random";
text = text + newline + "Trial" + tab + "Time" + tab + "Correct" + newline;
//document.getElementById('download').innerHTML = '<a id="save" download="This_File.txt" href="data:text/plain,'+text+'">Save</a>';
//document.getElementById('download').innerHTML = '<a id="save" download="earth.txt" href="data:text/plain,mostly harmless and a bit more">Save</a>';
document.getElementById('download').innerHTML = "<a id='save' download='earth.txt' href='data:text/plain,mostly harmless and a bit more'>Save</a>";
}
download();
</script>
</body>
</html>
Chciałbym podziękować wszystkim za wysiłek i czas, jaki mi dałeś.
Rozwiązanie html5 działa oczywiście tylko w przeglądarkach obsługujących atrybut pobierania. –