альтернатива, когда старый браузер не принимает jquery - PullRequest
1 голос
/ 21 января 2011

Я только что изменил тот факт, что пользователь моего сайта использует очень старый браузер, который не запускает jquery (в данном случае Safari 1.x) и в результате не может получить доступ к панели входа в систему, которая использует jqueryФункция slideToggle.

Может кто-нибудь придумать исправление, которое определяет, может ли браузер использовать jquery, и если не сделать эту ссылку, перейти на другую страницу вместо отображения панели входа?

Ответы [ 8 ]

5 голосов
/ 21 января 2011

Вы можете выполнить небольшую условную проверку, например

if(!'jQuery' in window) {
    // jQuery is not available
}

или, если Safari 1.x не знает об операторе IN (я не уверен), используйте

if(!window.jQuery) {
}
4 голосов
/ 21 января 2011

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

2 голосов
/ 28 января 2011

В исходном HTML-коде для ссылки href = для входа в систему установите для нее страницу входа в обычном HTML-формате.

Используя jQuery, прикрепите обработчик кликов к ссылке, если эта часть не выполнена,все в порядке, браузер просто перейдет по ссылке в ссылке на обычную страницу входа, что позволит вашему старому пользователю браузера войти еще.

$(document).ready(function(){
  $('#login_link_id').click(function(){
    // Your code here
  });
});
1 голос
/ 26 января 2011

Если вы используете javascript / jQuery, вы должны ВСЕГДА убедиться, что ваш сайт работает без него.В этом случае, если у вас есть всплывающее окно входа в систему;вы, вероятно, назначаете событие click, назначенное после загрузки DOM.

Что вам нужно сделать, это убедиться, что если jQuery отсутствует, ссылка загружает «обычную» страницу входа в систему, а не всплывающее окно.Я использую что-то похожее на это:

<a href="/login.html" id="loginlink">Log in</a>
<script>
    if(!'jQuery' in window) {
        $(document).ready(function(){
            //assign on click event to loginlink
        });
    }
</script>

Если jQuery не существует, то login.html будет нормально открываться.

0 голосов
/ 26 января 2011

Используйте язык на стороне сервера, чтобы определить, является ли это старое сафари на основе пользовательского агента, и загрузить другой файл JavaScript

0 голосов
/ 25 января 2011

Это похоже на случай, когда требуется прогрессивное улучшение .

Вы должны сделать несколько проверок

  1. посмотреть, если $ существует
  2. посмотреть, существует ли $ .fn
  3. [не уверен, если нужно] проверить, является ли $ .support функцией
  4. проверка поддержки функций при необходимости с помощью $ .support () http://api.jquery.com/jQuery.support/

В конце проверки, когда jQuery сообщает о необходимых функциях, остальная часть сценария может быть запущена.

Если вы не уверены, какие функции упомянуты в поддерживаемой вами поддержке, то для этого может потребоваться один тест в Safari 1.x, чтобы увидеть, какие значения возвращаются $ .support (), но это то, что вам неприятно old-browser-user может сделать для вас (если вы подготовите код и опубликуете) и сообщить полученный текст. Затем вы сравниваете список с другими доступными [старыми] браузерами и определяете необходимые функции.

Самый простой способ - потребовать все и отменить все сценарии, если отсутствует поддержка для какой-либо функции. Это также исключит IE6 и IE7 и оперу ниже 9. что-то и firefox ниже 2.0 или более того - я не уверен.

0 голосов
/ 24 января 2011

Мне кажется, что Safari 1.X внутренне испытывает проблемы с jQuery.Это означает, что простые проверки, например, существует ли $ в глобальном пространстве или что $ (функция) что-либо делает, не помогут.

Наиболее вероятной основной причиной будет то, что javascript выдает ошибку при загрузке самого jQuery, что затем остановит выполнение остальной части вашего кода javascript.

Здесь есть четыре возможных варианта.

  • Либо заставьте сайт работать с noscript.Замените свой контроль входа в систему чистым HTML и постбеками и попросите пользователя отключить JavaScript.Эта опция полезна, так как вы не будете исправлять проблему для проблем с safari 1.x.
  • Вы можете выполнить проверку javascript для safari 1.X и других неподдерживаемых браузеров и загружать jQuery только через тег scriptинъекция или ajax, если ваш пользователь использует поддерживаемый браузер.Если пользователь использует браузер, несовместимый с jQuery, вы можете вместо этого использовать обычный javascript.
  • Получить копию safari 1.x и посмотреть, почему jQuery ломается.Затем исправьте это и попросите вытащить его в выпуск jQuery 1.5.Это основано на том, что исправление можно сделать без взлома, и с этим согласна команда jQuery.
  • Попросите пользователя использовать совместимый браузер.

Возможны и другие варианты.Я лично склонялся бы к тому, чтобы попросить пользователя использовать совместимый браузер, потому что поддержка Safari 1.x нелепа.

0 голосов
/ 21 января 2011

Ух ты, серьезно ?!Safari 1.x ??В любом случае, попробуйте это ...

var isJQSupported = false;

$(function() { //shorthand for document.ready

  isJQSupported = true;

  //your usual code


});

if (!isJQSupported) {

  window.location = "http://www.apple.com/safari/download/";

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