запустить событие только один раз

#javascript #jquery

#javascript #jquery

Вопрос:

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

     <script type="text/javascript">
            if($.browser.msie amp;amp; $.browser.version=="8.0" || $.browser.msie amp;amp; $.browser.version=="7.0") 
            alert("Please upgrade your browser to at least version 8.0 in order to use all the features of this site.nnThank you.");
    </script>
  

обновленный код, предоставленный darin:

 <script type="text/javascript">
    var date = new Date(); date.setTime(date.getTime()   (30 * 60 * 1000)); $.cookie("explorer", "foo",{ expires: date });
        var cookie = $.cookie('explorer');

    if (cookie == null) {
        // the cookie is not present => you may do the checks
        if ($.browser.msie amp;amp; $.browser.version == '8.0') {
            // set the cookie so that the next time the user visits this page
            // he doesn't get the alert message
            $.cookie('explorer', 'true');
            alert("Please upgrade your browser to at least version 8.0 in order to use all the features of this site.nnThank you.");
        }
    }
 </script>
  

предупреждение не запускается, хотя

Комментарии:

1. 1. Используйте файл cookie. 2. Вы действительно призываете пользователей IE8 перейти на IE8?

2. это просто там в качестве примера. будет 6/7. спасибо

3. @bollo Я рекомендую условные комментарии IE для таргетинга на IE. Это лучше, потому что это не зависит от jQuery или JavaScript в целом. Элементы СКРИПТА внутри условных комментариев будут выполняться в указанных версиях IE немедленно (что хорошо, потому что вы можете разместить этот блок скрипта вверху страницы).

4. @sime. это было бы очень полезно, если css используется для таргетинга на определенный браузер. Спасибо

5. @bollo Это также очень полезно, если JavaScript используется для таргетинга на IE … (не только CSS)

Ответ №1:

Вам придется установить cookie, помня, какой была последняя версия, которую вы видели, и пилить пользователя, только если вы не видите cookie или если версия изменилась, но по-прежнему не соответствует тому, что вы хотите.


Примечание на стороне: Ваша проверка, как указано, будет указывать кому-либо, использующему IE8, что им нужно, по крайней мере, использовать IE8. Кажется странным. Если вы действительно хотите, чтобы браузер прослушивал, возможно:

 if ($.browser.msie amp;amp; parseFloat($.browser.version) < 8) {
    // Do whatever you're going to do with them having IE < 8.0
}
  

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

Комментарии:

1. @bollo: Рад, что помогло. (Я также только что отметил jQuery.support , на что вы, возможно, захотите взглянуть.)

2. @TJ. thanks за ссылку на jquery.support. очень полезная информация. определение для закладки

Ответ №2:

Вы могли бы использовать файлы cookie. Таким образом, вы можете проверить наличие какого-либо пользовательского файла cookie и, если его нет, показать сообщение и отправить файл cookie, чтобы в следующий раз сообщение не отображалось. Вот хороший плагин для jquery, который упрощает чтение и запись файлов cookie:

 <script type="text/javascript">
    var cookie = $.cookie('some_cookie_name');
    if (cookie == null) {
        // the cookie is not present => you may do the checks
        if ($.browser.msie amp;amp; $.browser.version == '7.0') {
            // set the cookie so that the next time the user visits this page
            // he doesn't get the alert message
            $.cookie('some_cookie_name', 'true');
            alert("Please upgrade your browser to at least version 8.0 in order to use all the features of this site.nnThank you.");
        }
    }
</script>
  

Комментарии:

1. @darin. нужно ли мне использовать плагин для использования этого? потому что я получаю: $.cookie не является функцией в firebug? Спасибо

2. @bollo, да, тебе нужно. Я ссылался на это в своем ответе: плагины. jquery.com/project/Cookie

3. @darin. я установил плагин, и он сработал один раз, но когда я закрыл браузер и очистил все файлы TIF и cookie, он не сработал? этот файл cookie установлен навсегда? Спасибо

4. @bollo, у вас есть возможность установить дату истечения срока действия, чтобы сделать cookie постоянным. Таким образом, оно переживет перезапуск браузера. Например, чтобы определить постоянный файл cookie, действительный в течение 30 минут: var date = new Date(); date.setTime(date.getTime() (30 * 60 * 1000)); $.cookie("example", "foo", { expires: date }); . Конечно, если пользователь удалит файлы cookie в своем браузере, они исчезнут, и его снова попросят, но это было бы нормально.

5. @darin. извините за медленное понимание. но я не вижу, чтобы в проводнике был установлен файл cookie? чего мне здесь не хватает? Спасибо