14.10.2013, 20:34
|
|
Профессор
|
|
Регистрация: 23.06.2011
Сообщений: 1,165
|
|
http://learn.javascript.ru/comparison
Цитата:
|
Значения null и undefined равны == друг другу и не равны чему бы то ни было ещё.
Это жёсткое правило буквально прописано в спецификации языка.
|
Как-то так предлагаю:
$(document).ready(function () {
if(!getCookie('iWas')) {
setTimeout( function(){
document.getElementById('popup').style.display='block';
setCookie('iWas', 'here');
} , 1000);
};
});
функции getCookie и setCookie не расшифровываю для краткости. Можете написать свои, можете использовать эти, например http://learn.javascript.ru/cookie
Последний раз редактировалось BETEPAH, 14.10.2013 в 20:49.
|
|
14.10.2013, 21:04
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,205
|
|
Так и не пойму, зачем эти танцы с куками если есть серверный язык и сессия (читай сеанс)...
|
|
14.10.2013, 22:05
|
Аспирант
|
|
Регистрация: 08.04.2012
Сообщений: 49
|
|
BETEPAH,
Спасибо за помощь, работает.
Все протестил и все отлично.
Но вылезла одна загвоздка. Все работает безупречно на локалхосте. А когда перенес на сервер, работать перестало.
Путем перебора 1000 отличий - нашел что на это как то влияет строчка которая подключается выше чем подключается jquery.cookies. Это строчка: <script type="text/javascript" async="" src="http://www.google-analytics.com/ga.js" style=""></script>
Может это быть причиной и какова природа этого?
Я вижу два варианта - как то перенести эту строчку ниже, или (чего не хочется) отказаться от этого аналитикса вообще.
Есть другие варианты?
|
|
14.10.2013, 22:16
|
|
Профессор
|
|
Регистрация: 23.06.2011
Сообщений: 1,165
|
|
Round,
сделайте на сервере тестовую страницу, на которой код будет работать неадекватно и дайте, пожалуйста, сюда ссылку.
|
|
14.10.2013, 22:17
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
function setcookie(a,b,c) {if(c){var d = new Date();d.setTime(d.getTime()+c);}if(a && b) document.cookie = a+'='+b+';path=/'+(c ? '; expires='+d.toUTCString() : '');else return false;}
function getcookie(a) {var b = new RegExp(a+'=([^;]){1,}');var c = b.exec(document.cookie);if(c) c = c[0].split('=');else return false;return c[1] ? c[1] : false;}
//ставим кук на сессию
setcookie('first_visit',true);
var first_visit = getcookie('first_visit');
if(first_visit) alert('"first_visit" - Кук есть')
function setcookie(a,b,c) {if(c){var d = new Date();d.setTime(d.getTime()+c);}if(a && b) document.cookie = a+'='+b+';path=/'+(c ? '; expires='+d.toUTCString() : '');else return false;}
function getcookie(a) {var b = new RegExp(a+'=([^;]){1,}');var c = b.exec(document.cookie);if(c) c = c[0].split('=');else return false;return c[1] ? c[1] : false;}
//Проверяем установленное предыдущим скриптом
var first_visit = getcookie('first_visit');
if(first_visit) alert('"first_visit" - Кук есть')
|
|
16.10.2013, 08:50
|
Аспирант
|
|
Регистрация: 08.04.2012
Сообщений: 49
|
|
Deff,
Спасибо за ещё один вариант.
BETEPAH,
Вчера весь день возился с этим глюком. Перенести этот гугланалитикс не вышло и убрать его нельзя, он мне нужен.
В итоге, я поменял код обработки куков но результат остался тот же - на локалхосте работает, а на сервере глючит.
Вот ссылка на главную страницу, на которой этот попап: http://hostultimo.com/preview/c/oxen/
Возможно, можно какой то костыль поставить?
Сейчас попап появляется на пару секунд и пропадает, если зайти повторно.
Новый код выглядит вот так:
// 'Delete' cookie for testing
function deleteCookie()
{
if(typeof(Storage) !== "undefined"){
sessionStorage.returnVisit = "false";
console.log("sessionStorage set.");
}
else{
setCookie("return_visit","false",1);
}
}
//W3 Schools setCookie function
function setCookie(c_name,value,exdays)
{
var exdate=new Date();
exdate.setDate(exdate.getDate() + exdays);
var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());
document.cookie = c_name + "=" + c_value;
}
//W3 Schools getCookie function
function getCookie(c_name)
{
var c_value = document.cookie;
var c_start = c_value.indexOf(" " + c_name + "=");
if (c_start == -1)
{
c_start = c_value.indexOf(c_name + "=");
}
if (c_start == -1)
{
c_value = null;
}
else
{
c_start = c_value.indexOf("=", c_start) + 1;
var c_end = c_value.indexOf(";", c_start);
if (c_end == -1)
{
c_end = c_value.length;
}
c_value = unescape(c_value.substring(c_start,c_end));
}
return c_value;
}
//Check return_visit cookie on page load
function bodyOnload()
{
if(getCookie("return_visit") === 'true' || sessionStorage.returnVisit === "true"){
//Do something if user has already visited page
var test = document.getElementById("test");
test.style.display = "none";
}
else
{
if(typeof(Storage) !== "undefined"){
sessionStorage.returnVisit = "true";
console.log('Session Storage set.');
}
else{
setCookie("return_visit","true",1);
}
}
}
$(document).ready(function () {
var delay_popup = 1000;
setTimeout("document.getElementById('parent_popup').style.display='block'", delay_popup);
});
А попап обернул ещё раз.
<div id="test">
<div id="parent_popup" class="popup-slider">
<div id="popup">
<?php if(function_exists('show_flexslider_rotator')) echo show_flexslider_rotator( 'popup' );?>
<a class="close_popup" title="Close" onclick="document.getElementById('parent_popup').style.display='none';">CLOSE X</a>
</div>
</div>
</div>
Последний раз редактировалось Round, 16.10.2013 в 08:58.
|
|
16.10.2013, 10:09
|
|
Профессор
|
|
Регистрация: 23.06.2011
Сообщений: 1,165
|
|
Сообщение от Round
|
на локалхосте работает
|
Странно. Не понимаю, как может работать такой код:
// 'Delete' cookie for testing
function deleteCookie()
{
if(typeof(Storage) !== "undefined"){
sessionStorage.returnVisit = "false";
console.log("sessionStorage set.");
}
else{
setCookie("return_visit","false",1);
}
}
//W3 Schools setCookie function
function setCookie(c_name,value,exdays)
{
var exdate=new Date();
exdate.setDate(exdate.getDate() + exdays);
var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());
document.cookie = c_name + "=" + c_value;
}
//W3 Schools getCookie function
function getCookie(c_name)
{
var c_value = document.cookie;
var c_start = c_value.indexOf(" " + c_name + "=");
if (c_start == -1)
{
c_start = c_value.indexOf(c_name + "=");
}
if (c_start == -1)
{
c_value = null;
}
else
{
c_start = c_value.indexOf("=", c_start) + 1;
var c_end = c_value.indexOf(";", c_start);
if (c_end == -1)
{
c_end = c_value.length;
}
c_value = unescape(c_value.substring(c_start,c_end));
}
return c_value;
}
//Check return_visit cookie on page load
function bodyOnload()
{
if(getCookie("return_visit") === 'true' || sessionStorage.returnVisit === "true"){
//Do something if user has already visited page
var test = document.getElementById("test");
test.style.display = "none";
}
else
{
if(typeof(Storage) !== "undefined"){
sessionStorage.returnVisit = "true";
console.log('Session Storage set.');
}
else{
setCookie("return_visit","true",1);
}
}
}
$(document).ready(function () {
var delay_popup = 1000;
setTimeout("document.getElementById('parent_popup').style.display='block'", delay_popup);
});
Во-первых, куки вы выставляете не сессионные, а на 1 день. Во-вторых, вы при загрузке страницы запускаете таймер, который через одну секунду должен показать попап, и тут же делаете проверку наличия куки? Зачем? Я же привел выше код. Сначала делайте проверку, а потом запускайте таймер попапа, если есть необходимость
|
|
16.10.2013, 10:16
|
Аспирант
|
|
Регистрация: 08.04.2012
Сообщений: 49
|
|
Я согласен, с тем что там сейчас много каши... Но это пока что тестовый вариант и я его всячески мучаю, по этому там могут быть накладки. Все замечания по ошибкам я принимаю с благодарностью.
Да, и там ещё была кнопка которой я сбрасывал куки, что бы каждый раз не переоткрывать окно браузера.
|
|
16.10.2013, 10:27
|
|
Профессор
|
|
Регистрация: 23.06.2011
Сообщений: 1,165
|
|
Сообщение от Round
|
Сейчас попап появляется на пару секунд и пропадает, если зайти повторно.
|
ну, правильно. Потому что сначала срабатывает $(document).ready(function (), в которой прописан запуск попапа через секунду, а затем, после загрузки всего содержимого страницы (включая картинки), срабатывает body.onload, в котором этот попап прикрывается.
Переделайте логику скрипта. Сделайте так, как я написал выше - сначала проверка, затем вызов
|
|
16.10.2013, 10:50
|
Аспирант
|
|
Регистрация: 08.04.2012
Сообщений: 49
|
|
BETEPAH,
ага, я наверное перегрелся и протупил с этим моментом...
Цитата:
|
ну, правильно. Потому что сначала срабатывает $(document).ready(function (), в которой прописан запуск попапа через секунду, а затем, после загрузки всего содержимого страницы (включая картинки), срабатывает body.onload, в котором этот попап прикрывается.
|
Сейчас переделаю.
|
|
|
|