javascript не удалят куки из Мозила
При загрузке сайта выезжает div с рекламой, при закрытии блока javascript удаляет куки. Блок
будет всплывать один раз при открытии страницы, затем для его появления потребуется перезапуск браузера. Корректно работает в Opera, Google Chrome, IE. В Мозила тоже все срабатывает, но если в настройках этого браузера (Инструметы/Настройки/Основные) применить: "При запуске Firefox: Показать окна и вкладки, открытые в прошлый раз", то в открытой вкладке с рекламным блоком не удаляются куки и соответственно этот блок не показывается. Пожалуйста, помогите решить проблему. Убедительная просьба, "не тыкать меня носом" в учебники HTML, Javascript и тд. - просто помогите. javascript var ie=document.all var dom=document.getElementById var ns4=document.layers var calunits=document.layers? "" : "px" var bouncelimit=32 //(must be divisible by 8) var direction="up" function initbox(){ if (!dom&&!ie&&!ns4) return crossobj=(dom)?document.getElementById("dropin").style : ie? document.all.dropin : document.dropin scroll_top=(ie)? truebody().scrollTop : window.pageYOffset crossobj.top=scroll_top-250+calunits crossobj.visibility=(dom||ie)? "visible" : "show" dropstart=setInterval("dropin()",25) } function dropin(){ scroll_top=(ie)? truebody().scrollTop : window.pageYOffset if (parseInt(crossobj.top)<100+scroll_top) crossobj.top=parseInt(crossobj.top)+40+calunits else{ clearInterval(dropstart) bouncestart=setInterval("bouncein()",50) } } function bouncein(){ crossobj.top=parseInt(crossobj.top)-bouncelimit+calunits if (bouncelimit<0) bouncelimit+=8 bouncelimit=bouncelimit*-1 if (bouncelimit==0){ clearInterval(bouncestart) } } function dismissbox(){ if (window.bouncestart) clearInterval(bouncestart) crossobj.visibility="hidden" } function truebody(){ return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body } function get_cookie(Name) { var search = Name + "=" var returnvalue = "" if (document.cookie.length > 0) { offset = document.cookie.indexOf(search) if (offset != -1) { offset += search.length end = document.cookie.indexOf(";", offset) if (end == -1) end = document.cookie.length; returnvalue=unescape(document.cookie.substring(offset, end)) } } return returnvalue; } function dropornot(){ if (get_cookie("droppedin")==""){ window.onload=initbox document.cookie="droppedin=yes" } } dropornot() DIV <div id="dropin" style="position:fixed;visibility:hidden;left:40%;top:500px;width:430px;height:430px;background-co lor:#EBEBEB"> <div align="right"><a href="action.php" onClick="dismissbox();return false"> <img src="banner/img/close.png" border=0 vspace=0 hspace=0 align="right" width="15" height="15" alt="закрыть"/> </a></div> <p><center><font style="font-size:19px; color:#FF0000;">Здесь текст</font><br><br><a href="action.php"><img src="banner/img/glass_banner.png" border="0"></a><br><br> <a href="action.php"><b>Подробнее>>></b></a> </center></p> </div> Здесь тестируемая страница: http://glass-pgc.ru/1.php |
|
Для Firefox можно сделать так: повесить обработчик на событие window.onunload и в нём удалить куку.
|
Нужно чтобы cookie удалялись сразу после закрытия div или перезагрузки/переходе страницы. Дата истечения, когда удалить cookies не подходит.
|
sashgera,
я дал Вам ссылку на рабочую функцию куков с пояснениями |
oneguy,
window.onunload кажется, срабатывает при переходе на другую страницу, мне это не подходит. Нужно чтобы cookie удалялась сразу после закрытия div. Так все-таки, может кто ответит - почему в моем случае Мозила не удаляет куки? |
Deff,
Перешел по Вашей ссылки и все внимательно прочитал. Я новичок, слабо разбираюсь в javascript. Я выложил Java-скрипт, может быть, Вы укажете, где именно ошибка? Во всех браузерах срабатывает, кроме Мозилы. |
Цитата:
|
Просто ставить кук на время (*тогда траблов не возникает,
Хотя можно ставить два кука на текущую сессию и на длинное время - тестируем наличия кука по одновременному наличию кука сессии и наличию кука по времени а стираем лишь кук по длинному времени |
sashgera, я вас не совсем понял. Вы пишете:
Цитата:
Цитата:
|
|
Цитата:
так что оптимум - не заморачивацо на сессиях браузера |
Цитата:
Да, я имею ввиду рекламный баннер - http://www.glass-pgc.ru/1.php Как я писал выше, я слабо владею языком программирования JavaScript. JavaScript который я выложил, нашел в просторах Интернета. Опишу проще, что мне нужно - JavaScript и DIV (рекламный блок) будут в header.php (в шапке сайта). При открытии любой страницы сайта всплывает DIV c рекламой, если его закрыть, то он не должен больше всплывать при перезагрузке страницы или при переходе на другую страницу этого сайта в течение 2-3 часов (совет Deff). Если у Вас есть желание оказать мне помощь, то, пожалуйста, внесите изменения в выложенный мной javascript. |
Цитата:
|
Deff, спасибо, если можно с комментариями
|
Deff,
Цитата:
А можно чтобы при перезагрузке браузера (особенно в Мозиле), баннер всплывал, не дожидаясь истечения срока кука? Цитата:
var ie=document.all var dom=document.getElementById var ns4=document.layers var calunits=document.layers? "" : "px" var bouncelimit=32 //(must be divisible by 8) var direction="up" function initbox(){ if (!dom&&!ie&&!ns4) return crossobj=(dom)?document.getElementById("dropin").style : ie? document.all.dropin : document.dropin scroll_top=(ie)? truebody().scrollTop : window.pageYOffset crossobj.top=scroll_top-250+calunits crossobj.visibility=(dom||ie)? "visible" : "show" dropstart=setInterval("dropin()",25) } function dropin(){ scroll_top=(ie)? truebody().scrollTop : window.pageYOffset if (parseInt(crossobj.top)<100+scroll_top) crossobj.top=parseInt(crossobj.top)+40+calunits else{ clearInterval(dropstart) bouncestart=setInterval("bouncein()",50) } } function bouncein(){ crossobj.top=parseInt(crossobj.top)-bouncelimit+calunits if (bouncelimit<0) bouncelimit+=8 bouncelimit=bouncelimit*-1 if (bouncelimit==0){ clearInterval(bouncestart) } } function dismissbox(){ if (window.bouncestart) clearInterval(bouncestart) crossobj.visibility="hidden" } function truebody(){ return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body } function get_cookie(Name) { var search = Name + "=" var returnvalue = "" if (document.cookie.length > 0) { offset = document.cookie.indexOf(search) if (offset != -1) { offset += search.length end = document.cookie.indexOf(";", offset) if (end == -1) end = document.cookie.length; returnvalue=unescape(document.cookie.substring(offset, end)) } } return returnvalue; } function dropornot(){ if (get_cookie("droppedin")==""){ window.onload=initbox var today = new Date(); d = new Date(today.getTime() + (01*60*1000)); // 23*60*60*1000 -23 - это количество часов, потом умножаем на 60 минут, на 60 секунд, на 1000 миллисекунд (сейчас стоит на 1 минуту) document.cookie="droppedin=yes; path=/; expires=" + d.toGMTString(); } } dropornot() |
sashgera,
Чо нидь типо так - поправите если что не так: <div id="dropin" style="position:fixed;visibility:hidden;left:40%;top:500px;width:430px;height:430px;background-co lor:#EBEBEB"> <div align="right"><a href="action.php" onClick="dismissbox();return false"> <img src="banner/img/close.png" border=0 vspace=0 hspace=0 align="right" width="15" height="15" alt="закрыть"/> </a></div> <p><center><font style="font-size:19px; color:#FF0000;">Здесь текст</font><br><br><a href="action.php"><img src="banner/img/glass_banner.png" border="0"></a><br><br> <a href="action.php"><b>Подробнее>>></b></a> </center></p> </div> <script> function setcookie(a,b,c) {if(c){var d = new Date();d.setTime(d.getTime()+c);}if(a && b) document.cookie = a+'='+b+(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 ie=document.all var dom=document.getElementById var ns4=document.layers var calunits=document.layers? "" : "px" var bouncelimit=32 //(must be divisible by 8) var direction="up" function initbox(){ if (!dom&&!ie&&!ns4) return; crossobj=(dom)?document.getElementById("dropin").style : ie? document.all.dropin : document.dropin scroll_top=(ie)? truebody().scrollTop : window.pageYOffset crossobj.top=scroll_top-250+calunits crossobj.visibility=(dom||ie)? "visible" : "show" dropstart=setInterval("dropin()",25) } function dropin(){ scroll_top=(ie)? truebody().scrollTop : window.pageYOffset if (parseInt(crossobj.top)<100+scroll_top) crossobj.top=parseInt(crossobj.top)+40+calunits else{ clearInterval(dropstart) bouncestart=setInterval("bouncein()",50) } } function bouncein(){ crossobj.top=parseInt(crossobj.top)-bouncelimit+calunits if (bouncelimit<0){ bouncelimit+=8; bouncelimit=bouncelimit*-1; } if (bouncelimit==0) clearInterval(bouncestart) } function dismissbox(){ if (window.bouncestart) clearInterval(bouncestart) crossobj.visibility="hidden" } function truebody(){ return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body } function dropornot(){ if (!getcookie("droppedin")||!getcookie("Session")){ //Если хотя бы одного кука нет - перезапускаем setcookie("Session",true) ;//Кук на сессию; setcookie("droppedin",true,1*60*1000) ;//Кук на минуту window.onload=initbox; //Запуск } } dropornot(); </script> |
Deff,
Opera, Google Chrome, IE - при открытие браузера - баннер с рекламой всплывает и сразу прячется, через минуту при перезагрузке/переходе на другую страницу этого сайта - также, баннер всплывает и сразу прячется, а нужно, чтобы баннер всплыл и его закрыли вручную. Здесь страница с внесенными Вами изменениями http://www.glass-pgc.ru/1.php В Мозила - при открытие браузера (в настройках - "При запуске Firefox: Показать окна и вкладки, открытые в прошлый раз) - баннер с рекламой не всплывает, через минуту при перезагрузке/переходе на другую страницу этого сайта - баннер всплывает и сразу прячется. Цитата:
|
Цитата:
Вот эта часть - вся моя добавка function dropornot(){ if (!getcookie("droppedin")||!getcookie("Session")){ //Если хотя бы одного кука нет - перезапускаем setcookie("Session",true) ;//Кук на сессию; setcookie("droppedin",true,10*60*1000) ;//Кук на минуту window.onload=initbox; //Запуск } } dropornot();Куки стоят и всё это сработало ( где то лаганул при правке Вашего кода из скрипта Выше |
sashgera,
Автосворачивает вот этот кусок кода /* else{ clearInterval(dropstart) bouncestart=setInterval("bouncein()",50) }*/ (но имхо походу тут в логике что то не АЙС если его убрать всё в норме |
Deff, строку которую Вы указали, убрал, теперь все нормально - http://www.glass-pgc.ru/1.php
А как насчет способа обойти Мозила, не меняя в настройках "Показать окна и вкладки…"? |
Собстна вопрос - а что не устранивает - два - три часа ?
|
sashgera,
Кстати вроде я понял зачем эта строка bouncestart=setInterval("bouncein()",50) Она автозакрывает рекламу, если пользователь долго думает или отошел, но тады нужно существенно увеличить время для автосворачивания bouncestart=setInterval("bouncein()",5000) |
Воть какая та статья про куки в Мозилле
http://forum.mozilla-russia.org/viewtopic.php?id=44668 Цитата:
|
Deff,
Цитата:
Цитата:
Цитата:
Вам большое спасибо, Вы мне здорово помогли! |
Deff,
У меня возник еще вопрос, поможете? В корне директории сайта, есть еще папка "_joom", в ней тоже находятся страницы сайта. Соответственно куки получаю: droppedin: true, Session: true и _joom droppedin: true, _joom Session: true Проблема заключается в том, что если зайти на страницу, которая в директории "_joom", баннер всплывет, но если с нее перейти на страницу которая в корне, баннер всплывает еще раз. Наверное, дело в атрибуте path, но как его прописать не знаю |
Цитата:
document.cookie="name=value; Path=/bla/bla/"; Если корневую директорию, то: document.cookie="name=value; Path=/"; |
oneguy,
Цитата:
document.cookie="name=value; Path=/" function setcookie(a,b,c) {if(c){var d = new Date();d.setTime(d.getTime()+c);}if(a && b) document.cookie = a+'='+b+(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 ie=document.all var dom=document.getElementById var ns4=document.layers var calunits=document.layers? "" : "px" var bouncelimit=32 //(must be divisible by 8) var direction="up" function initbox(){ if (!dom&&!ie&&!ns4) return; crossobj=(dom)?document.getElementById("dropin").style : ie? document.all.dropin : document.dropin scroll_top=(ie)? truebody().scrollTop : window.pageYOffset crossobj.top=scroll_top-250+calunits crossobj.visibility=(dom||ie)? "visible" : "show" dropstart=setInterval("dropin()",25) } function dropin(){ scroll_top=(ie)? truebody().scrollTop : window.pageYOffset if (parseInt(crossobj.top)<100+scroll_top) crossobj.top=parseInt(crossobj.top)+40+calunits else{ clearInterval(dropstart) } } function bouncein(){ crossobj.top=parseInt(crossobj.top)-bouncelimit+calunits if (bouncelimit<0){ bouncelimit+=8; bouncelimit=bouncelimit*-1; } if (bouncelimit==0) clearInterval(bouncestart) } function dismissbox(){ if (window.bouncestart) clearInterval(bouncestart) crossobj.visibility="hidden" } function truebody(){ return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body } function dropornot(){ if (!getcookie("droppedin")||!getcookie("Session")){ //Если хотя бы одного кука нет - перезапускаем setcookie("Session",true) ;//Кук на сессию; setcookie("droppedin",true,01*60*1000) ; window.onload=initbox; //Запуск } } dropornot(); |
sashgera,
Воть Куки с патчем => http://hostjs-mybb2011.narod.ru/js/C...ary_v_011_4.js там getCookie01(name) setCookie01(name, value, expires, path, domain) |
Цитата:
|
Deff,
Цитата:
|
Цитата:
|
Deff,
Цитата:
|
куки и директории сайта
При загрузке сайта выезжает блок с рекламой, при закрытии блока он не показывается в течение ~какого-то времени (сейчас 1 минута). Все работает (помог мне в этом Deff). Вот тестовая страница http://www.glass-pgc.ru/1.php
Но есть небольшая проблема - в корне директории сайта, есть еще папка "_joom", в ней тоже находятся страницы сайта. Соответственно куки получаю: droppedin: true, Session: true и _joom droppedin: true, _joom Session: true Проблема заключается в том, что если зайти на страницу, которая в директории "_joom", баннер всплывет, но если с нее перейти на страницу которая в корне, баннер всплывает еще раз. Если у кого есть желание оказать помощь - дописать javascript, буду благодарен DIV <div id="dropin" style="position:fixed;visibility:hidden;left:40%;top:500px;width:430px;height:480px;background-color:#EBEBEB"> <div align="right"><a href="1.php" onClick="dismissbox();return false"> <img src="banner/img/close.png" border=0 vspace=0 hspace=0 align="right" width="32" height="32" alt="закрыть"/> </a></div> <p><center><font style="font-size:19px; color:#FF0000;">Здесь текст</font><br><br><a href="1.php"><img src="img1/no_image_.jpg" border="0"></a><br><br> <a href="1.php"><b>Подробнее>>></b></a> </center></p> </div> Javascript <script> function setcookie(a,b,c) {if(c){var d = new Date();d.setTime(d.getTime()+c);}if(a && b) document.cookie = a+'='+b+(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 ie=document.all var dom=document.getElementById var ns4=document.layers var calunits=document.layers? "" : "px" var bouncelimit=32 //(must be divisible by 8) var direction="up" function initbox(){ if (!dom&&!ie&&!ns4) return; crossobj=(dom)?document.getElementById("dropin").style : ie? document.all.dropin : document.dropin scroll_top=(ie)? truebody().scrollTop : window.pageYOffset crossobj.top=scroll_top-250+calunits crossobj.visibility=(dom||ie)? "visible" : "show" dropstart=setInterval("dropin()",25) } function dropin(){ scroll_top=(ie)? truebody().scrollTop : window.pageYOffset if (parseInt(crossobj.top)<100+scroll_top) crossobj.top=parseInt(crossobj.top)+40+calunits else{ clearInterval(dropstart) } } function bouncein(){ crossobj.top=parseInt(crossobj.top)-bouncelimit+calunits if (bouncelimit<0){ bouncelimit+=8; bouncelimit=bouncelimit*-1; } if (bouncelimit==0) clearInterval(bouncestart) } function dismissbox(){ if (window.bouncestart) clearInterval(bouncestart) crossobj.visibility="hidden" } function truebody(){ return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body } function dropornot(){ if (!getcookie("droppedin")||!getcookie("Session")){ //Если хотя бы одного кука нет - перезапускаем setcookie("Session",true) ;//Кук на сессию; setcookie("droppedin",true,1*60*1000) ;//Кук на минуту window.onload=initbox; //Запуск } } dropornot(); </script> |
sashgera,
Попробуте заменить - если удачно - перезалейте внешний скрипт к себе - замените ссылку <script src="http://hostjs-mybb2011.narod.ru/js/CookieJsLibrary_v_011_4.js"></script> <script> var ie=document.all var dom=document.getElementById var ns4=document.layers var calunits=document.layers? "" : "px" var bouncelimit=32 //(must be divisible by 8) var direction="up" function initbox(){ if (!dom&&!ie&&!ns4) return; crossobj=(dom)?document.getElementById("dropin").style : ie? document.all.dropin : document.dropin scroll_top=(ie)? truebody().scrollTop : window.pageYOffset crossobj.top=scroll_top-250+calunits crossobj.visibility=(dom||ie)? "visible" : "show" dropstart=setInterval("dropin()",25) } function dropin(){ scroll_top=(ie)? truebody().scrollTop : window.pageYOffset if (parseInt(crossobj.top)<100+scroll_top) crossobj.top=parseInt(crossobj.top)+40+calunits else{ clearInterval(dropstart) } } function bouncein(){ crossobj.top=parseInt(crossobj.top)-bouncelimit+calunits if (bouncelimit<0){ bouncelimit+=8; bouncelimit=bouncelimit*-1; } if (bouncelimit==0) clearInterval(bouncestart) } function dismissbox(){ if (window.bouncestart) clearInterval(bouncestart) crossobj.visibility="hidden" } function truebody(){ return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body } function dropornot(){ if (!getCookie01("droppedin")||!getCookie01("Session")){ //Если хотя бы одного кука нет - перезапускаем setCookie01("Session",true,'','/') ;//Кук на сессию; setCookie01("droppedin",true,1*60*1000,'/') ;//Кук на минуту window.onload=initbox; //Запуск } } dropornot(); </script> |
Deff,
Цитата:
В итоге, если зайти на страницу Joomla баннер всплывет, но если с нее перейти на статичную страницу - баннер повторно всплывает. А нужно, как и было задумано - на время и сессию. Если зайти со статичной страницы, получаю куки - droppedin: true, Session: true Если с Joomla, получаю куки - droppedin: true, Session: true, _joom droppedin: true, _joom Session: true Библиотеку CookieJsLibrary_v11.4.4 подключил, она работает, но это не то, что мне нужно, в итоге в статичных страницах баннер всплывает, в Joomla - нет. |
sashgera,
:blink: Ничо не понял ... есть один доменный адрес - выложите примерный адрес есть второй адрес - выложите примерный адрес что происходит с первым и вторым адресом и что должно происходить Или что происходит: при переходе с первого на второй или со второго на первый |
Deff,
Домен один http://www.glass-pgc.ru , но в корне есть папка "_joom" в ней Joomla Вот статичные страницы (в корне) http://www.glass-pgc.ru Вот страницы "_joom" http://www.glass-pgc.ru/_joom/ , если зайти отсюда и кликнуть по баннеру, будет переход на статичную страницу php и он всплывет еще раз. Почему на сайте и Joomla и статичные страницы php - это странные для меня указания директора |
sashgera,
Ок покавыряюсь - ток не быстро а отключить на _joom -скрипт - не проще ? (или слегка модифицировать ? |
Deff,
Если отключись на "_joom" javascript, то там баннер не будет всплывать, а нужно чтобы всплывал (на время и сессию) на всех страницах, независимо в какой директории они находятся. Может быть дело в дело в атрибуте "path"? Но как его прописать в моем javascript - не знаю. Вот кстати похожая проблема http://www.softtime.ru/forum/read.ph...=50508&page=30 |
Часовой пояс GMT +3, время: 12:36. |