как сохранить куки с веб-страницы? - PullRequest
0 голосов
/ 07 октября 2009

У меня есть текстовые поля на сайте. Когда я набираю что-то, нажимаю кнопку «Назад», затем кнопку «Вперед», все, что я набрал, все еще там.

Более конкретно, текстовые поля начинаются с серого текста. Когда вы печатаете в первый раз, поле очищает серый текст, а затем показывает, что вы печатаете черным. Когда вы сделаете это, затем нажмите кнопку «Назад», а затем «вперед», то, что мы первоначально набрали, теперь отображается серым цветом. Нажатие на поле больше не очищает его, а дальнейший набор текста также отображается серым цветом.

Вот мой код (каретка возвращена для чтения ради):

"<input id="friend_name_0" 
type="text" 
style="color: rgb(119, 119, 119);" 
value="eg: Sharon" 
onblur="if(this.value==''){this.value = 'eg: Sharon'; this.style.color = '#777777';}" onfocus="if(this.value == 'eg: Sharon'){clearField(friend_name_0); this.style.color = '#222222';}" 
maxlength="9" "
name="friend_name_0"/>

Спасибо, ребята!

Ответы [ 2 ]

1 голос
/ 07 октября 2009

Да, как говорит Виктор, это не печенье. Проблема в том, что страница кэшируется браузером.

В вашем примере это вполне ожидаемо, поскольку страница не изменилась с тех пор, как пользователь пошел назад и затем вперед (представьте, что они внесли некоторую информацию и, например, забыли что-то с последней страницы).

Это становится действительно грязным, хотя, когда страница на самом деле является НОВОЙ страницей (страница 1 и страница 2 имеют некоторый URL, ту же форму, различное ожидаемое содержимое), с этой проблемой я тоже сталкиваюсь.

Единственно достоверные способы предотвращения такого поведения, о котором я знаю, это (в произвольном порядке):

  1. Использование другого URL-адреса (добавьте в конец переменной url произвольную цифру-букву в качестве переменной get, назовите ее «uid» или что-то подобное). Это не помешает взад и вперед, но не позволит двум страницам с одинаковыми URL-адресами быть перепутанными кешем браузера.

  2. Добавьте немного javascript, который говорит что-то вроде "onload: reload". Очевидно, что вам не нужен бесконечный цикл, поэтому у вас может быть другая переменная get, которая сообщит сценарию, загрузила ли она ранее страницу. Возможно скрытый ввод на странице, с которой он проверяет. Итог, страница принудительной перезагрузки.

  3. Есть js-скрипт, который говорит "onunload, стереть все пользовательские значения ввода". Разгрузка была бы хорошей, поскольку она не уничтожила бы запрос POST или GET, я не думаю, только значения, оставленные на странице, поскольку она оставлена ​​позади.

  4. Напишите js-скрипт, который onload стирает все поля, для которых значение не установлено в качестве атрибута (т. Е. input type='text' value='stuff'). Если оно видит значение в самом HTML, оно оставляет его.

Последний - это то, над чем я работаю. Сложность заключается в том, чтобы не нарушить доступность страницы.

0 голосов
/ 07 октября 2009

Это не Cookies, а браузер, который сохраняет поля формы заполненными. Первоначальный цвет установлен на серый, поэтому только ваш скрипт изменит его при событии. У вас есть блок IF для события, но у вас нет блока ELSE, чтобы установить его должным образом.

<input id="friend_name_0" 
type="text" 
style="color: #777777;" 
value="eg: Sharon" 
onblur="if(this.value==''){this.value = 'eg: Sharon'; this.style.color = '#777777';}
else {this.style.color = '#222222';}"
onfocus="if(this.value == 'eg: Sharon'){clearField(friend_name_0); this.style.color = '#222222';}" 
maxlength="9"
name="friend_name_0" />

Имейте в виду, что когда вы пишете блок IF, вы всегда должны думать о ELSE и опускать его, если не нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...