Как заставить плагин jquery, написанный кем-то другим, работать во всех браузерах, на которых он может работать? - PullRequest
0 голосов
/ 09 февраля 2012

Как использовать функцию обнаружения функций для создания плагина , написанного кем-то другим, для работы во всех тех браузерах, где он действительно может работать / поддерживается.В документации plugin говорится, что он поддерживается в IE 8, но на самом деле он не работает.Я знаю, что это из-за ненадежного определения браузера, но что я могу сделать, чтобы он работал во всех тех браузерах, где он действительно может работать?

Подробности

Просто чтобыприведите конкретный пример, я использую выбранный плагин jQuery версии 0.9.7 и, как сказано в документации -

Поддерживаются все современные браузеры (Firefox, Chrome, Safari и IE9).Также включена устаревшая поддержка IE8.

Однако я обнаружил, что она не работает во многих IE 8, но работает в IE 8 тестера IE. Затем внутри кода плагина я нашел эту логику обнаружения браузера, котораяпросто выходит из логики плагина -

if ($.browser.msie && ($.browser.version === "6.0" || $.browser.version === "7.0")) {
   return this;
}

И я обнаружил, что $.browser.version возвращал 7.0 на моем IE 8, и поэтому он не работал.Ну, ничего удивительного, я знаю.Я попытался удалить условие $.browser.version === "7.0", просто чтобы проверить, действительно ли оно работает на моем IE 8, и это сработало.Но я не могу удалить это условие, поскольку автор плагина сделал это, и он должен знать об этом лучше.

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

И в этот раз, когда я искал, я узнал о Модернизаторе .Может ли это быть полезным?Я не уверен, потому что он говорит это для создания следующего поколения сайтов на HTML5 и CSS3, и мы пока еще не используем HTML5, CSS3.Или мне достаточно jQuery.support , как только я узнаю, какие функции нужны плагину.

Дальнейшие причины

Я нашел этовопрос Обнаружение браузера с помощью обнаружения объекта / функции , где автор спрашивает, можно ли использовать функцию обнаружения функции, чтобы выяснить, что на самом деле представляет собой браузер.Один комментарий гласит: «Весь смысл обнаружения функций заключается в том, чтобы вы могли выяснить, есть ли в браузере действительно нужные вам функции. Когда вы делаете это правильно, вам на самом деле все равно, какой это браузер, вам просто важно, будет ли онимеет функцию, необходимую для выполнения вашей работы. "Я понимаю и согласен с этим, но какой смысл говорить, что данный плагин поддерживается в этих браузерах.Почему авторы плагинов не перечисляют все необходимые функции, облегчая тем самым их использование?Но тогда мне кажется, что точка в списке поддерживаемых браузеров просто дает представление о совместимости, предполагая идеальных браузеров .

Например, два идеальных браузера IE 6 будут иметь одну и ту же выпадающую z-index проблему выбора, мешающую всплывающим элементам div.Предположим, что у плагина есть проблемы с этим, тогда говоря, что этот плагин не совместим с IE 6, это означает идеальный браузер IE 6, а не другой браузер IE 8, пользовательский агент которого закален и который возвращает IE 6 в качестве версии браузера.

В этом случае (указание списка поддерживаемых браузеров просто дает представление о совместимости, предполагая идеальные браузеры ), имеет ли смысл идентифицировать браузеры с помощью обнаружения функций?Если, так почему не так много примеров фрагментов?

Множество вопросов .. :) Наверное, сегодня я все это задал ...

1 Ответ

0 голосов
/ 09 февраля 2012

Вы можете попробовать выполнить это в плагине или перед тем, как использовать плагин:

var checkString = '<!--[if lt IE 7 ]> <div id="my-id" class="lt-ie7" > <![endif]--><!--[if IE 7 ]> <div id="my-id" class="ie7"> <![endif]--><!--[if IE 8 ]> <div id="my-id" class="ie8"> <![endif]--><!--[if IE 9 ]> <div id="my-id" class="ie9"> <![endif]--><!--[if (gt IE 9)|!(IE)]><!--> <div id="my-id" class="other"> <!--<![endif]-->';

$('body').append(checkString);

$('body').append('Your browser is: '+$('#my-id').attr('class'));

Пример: http://jsbin.com/inisol

Кстати: у вас нет IE для его проверки.Надеюсь, что это работает.

...