2016-09-02 6 views
0

Попытка просто отображать всплывающее окно один раз за сеанс пользователя (наш ресторан будет закрыт для частного события) ... , когда пользователь нажимает на другую страницу на нашем сайте, всплывающее окно еще раз всплывет ... Я не хотел этого ... Так что я сделал это:мобильные устройства не могут прочитать мой файл cookie

<script type="text/javascript"> 
    if (document.cookie.indexOf("naniCOOKIE=") == -1) { 
    var now = new Date(); 
    document.cookie = "naniCOOKIE=yes"; 

    function Landing() { 
     $lb.launch({ 
     url: "special_notice.php", 
     options: "width:570px height:110px", 
     title: " ", 
     description: "" 
     }); 
    } 
    } 
</script> 

и он прекрасно работает на всех ПК Мака и т.д ... Просто не на мобильных устройствах !! Он всегда будет всплывать ... и я не хочу этого ... Что я делаю неправильно?

+0

Вы уверены, что ваш код здесь? Функция Landing никогда не вызывается. – AgentME

+0

Я должен быть немного подробнее ... \t каждая страница имеет: У меня есть заголовок.php, который включает в себя: <= $ closed_notice;> внутри переменных: $ closed_notice = «<тип скрипта = "текст/JavaScript"> если (document.cookie.indexOf ("naniCOOKIEE =") == - 1) { var now = new Date(); document.cookie = "naniCOOKIEE = yes"; функция Landing() {$ lb.launch ({ URL: "special_notice.php", варианты: "ширина: 570px Высота: 110px", }); } } '; – droogiee

ответ

0

Определение функции «Посадка» только в том случае, если файл cookie отсутствует, не является отличным решением, потому что (если он работает по назначению) произойдет ошибка, когда страница попытается вызвать функцию «Посадка», если она не определена.

Кроме того, это плохая стратегия, потому что она не поддерживается Javascript (ES5), и она работает только в некоторых браузерах из-за нестандартного поведения. Объявление функций не должно быть в не-функциональных блоках, таких как if-блок. Некоторые браузеры (например, мобильные устройства, которые вы пробовали) будут поднимать декларацию функции вверх и из if-блока.

Вот хороший способ исправить обе проблемы, чтобы он не опирался на нестандартное поведение и никогда не покидает Landing undefined. Вместо того, чтобы иногда определять функцию, просто переместите условную проверку в функцию:

function Landing() { 
    if (document.cookie.indexOf("naniCOOKIE=") == -1) { 
    var now = new Date(); 
    document.cookie = "naniCOOKIE=yes"; 

    $lb.launch({ 
     url: "special_notice.php", 
     options: "width:570px height:110px", 
     title: " ", 
     description: "" 
    }); 
    } 
} 
+0

Большое спасибо за ответ и настройку моего кода .. я изменил его на то, что вы предложили .. работает так, как должно быть с настольной ОС, но всплывающее окно все еще происходит на каждой загрузке страницы с ipad, который я только что тестировал. – droogiee

+0

NEVER РАЗУМ! nix что !!! он работает отлично !!! очень странно, я очистил кеш и историю IPADS .. закрыл сафари и протестировал, и он все еще появлялся на каждой странице! затем я нажимаю обновление на сафари и TADA! это сработало .. я бы пошел на страницы, и никаких всплывающих окон! большое вам спасибо за помощь! Я потратил часы, пытаясь понять это сам! Спасибо Спасибо! – droogiee