Есть код, типа "Крестики - нолики". Как сохранить результат игры чтобы и поля были закрашены (чтобы знать кто куда ходил) и подсказки работали в сохранённом файле?
<script type="text/javascript">
function doSaveAs(){
if (document.execCommand){
document.execCommand("SaveAs")
}
else {
alert("Save-feature available only in Internet Exlorer 5.x.")
}
}
</script>
<form>
<input type="button" value="save" onClick="doSaveAs()"
</form>
<a href="javascript:void(0);"
onclick="document.execCommand('SaveAs',true,'file.html');"
>Save this page</a>
</body>
</html>
01.09.2017, 10:22
konart
скажу сразу что кнопки не работают, увы. Лучший результат - это нажав правую кнопку и далее "сохранить как", правда в этом случае заливка ячеек сохраняется корректно, а вот подсказки работать перестают???? В процессе игры подсказки имеют тот же стиль как и ячейка и надписи "ЭТО НОЛИК", "ЭТО КРЕСТИК" а после сохранения подсказка теряет стиль и пишет цвет ячейки. Как исправить ситуацию не меняя общую концепцию?
04.09.2017, 12:25
Degradator
Делай так
<!DOCTYPE html>
<html>
<head>
<style>td{width:15px;height:15px;border: 1px solid black;}</style>
</head>
<body>
<script>
(function(){
var field = loadData();
var isCross = true;
var table = document.createElement('table');
for(var i = 0; i < field.length; i++) {
var tr = document.createElement('tr');
for(var j = 0; j < field[i].length; j++) {
var td = createCell(field[i][j], i, j);
tr.appendChild(td);
}
table.appendChild(tr);
}
function createCell(value, i, j) {
var cell = document.createElement('td');
switch(value) {
case 0:
cell.innerHTML = 'O';
break;
case 1:
cell.innerHTML = 'X';
break;
}
cell.addEventListener('click', function(){
updateField(cell, i, j);
});
return cell;
}
function updateField(cell, i, j) {
if(field[i][j] !== -1) {
return;
}
cell.innerHTML = isCross ? 'X' : 'O';
field[i][j] = isCross ? 1 : 0;
isCross = !isCross;
isWin();
}
function isWin() {
alert("is win function should check is player win or not");
}
function loadData() {
return [
[-1, -1, -1],
[-1, -1, -1],
[-1, -1, -1]
]
}
document.body.appendChild(table);
})()
</script>
</body>
</html>
Тут у тебя есть функцтя loadData, которая может брать данные например с сервера и отдавать их в твой скрипт. Если ты будешь работать с данными, ты легко сможешь их сохранить, и загрузить. Тебе не надо сохранять всю страницу, достаточно только данные. Для этого ты можешь использовать localStorage или базу данных на сервере. Сохранять страницу в виде html на компьютере пользователя не стоит.
11.09.2017, 08:59
konart
Degradator спасибо за совет, НО, мне нужно чтобы была возможность сохранять именно в виде html и именно на компьютере пользователя!!!!
12.09.2017, 09:01
Degradator
именно в виде html и именно на компьютере пользователя
В таком случае тебе надо иметь какой-то сервер. Это может быть совершенно тупой обработчик - ты посылаешь в него текст, и он его отдает как аттачмент-файл.
Сомневаюсь что у тебя получитсья сделать это без сервера. Но если все-таки хочешь попытаться, то посмотри как работает window.open. Может быть туда можно как-то передать html (но это скорее всего не так) и задать чтобы он скачивался. Ну и ты не сможешь указать какую-то кастомную директорию. Это точно.