Как я могу обнаружить поддержку довольного через JavaScript?

StackOverflow https://stackoverflow.com/questions/1882205

Вопрос

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

  • Internet Explorer?
  • Вебкит? (Но я читал, что мобильное сафари не поддерживает его)
  • Опера?
  • Гекко и версия> = 1.9? (То есть Firefox 3 или позже)

Есть ли лучший метод, основанный на тестировании на поддержку непосредственно через JavaScript, или это в значительной степени единственный способ проверить поддержку?

Это было полезно?

Решение

Лучший способ проверить определенную функцию - это на самом деле тест Для этой функции на элементе, который, как вы знаете, следует поддерживать его, например,:

if(element.contentEditable != null)
    // then it's supported

или же

if(typeof(element.contentEditable) != 'undefined')
   // same thing.. but with typeof you can be more specific about the type of property you need to find

Другие советы

var canEditContent= 'contentEditable' in document.body;

Лучшее решение для моего сценария (аналогично вашему), которое я придумал ниже. Это, вероятно, не пуленепробиваемое, но охватывает большинство ситуаций:

var ua = navigator.userAgent;
var android_version = ua.match(/Android ([0-9\.]+)/);
var div = document.createElement("DIV");

if( typeof(div.contentEditable) == 'undefined' ||
  (/(iPhone|iPod|iPad)/i.test(ua) && /OS [1-4]_\d like Mac OS X/i.test(ua)) ||
  (android_version!=null && parseFloat(android_version[1])<3 ) ||
  (/(Opera Mobi)/i.test(ua))
) {
  // doesn't support contenteditable
} else {
  // supports contenteditable
}

Вы можете проверить это в это JSfiddle.

Обратите внимание: В зависимости от ваших потребностей и цели, вам также может потребоваться обнаружить версию IE, потому что она является поддержкой довольной, это ... «не идеально» :-) Большинство болей предпринимаются Super Library rangy.js.

Ответ Bobince работает по большей части, но, как было сказано, вам понадобится нюхание пользователя, чтобы исключить версии iOS и Android, которые не поднимают программную клавиатуру. Я сейчас использую что -то вроде этого:

function isContentEditable() {
    var canEditContent = 'contentEditable' in document.body;
    if (canEditContent) {
        var webkit = navigator.userAgent.match(/(?:iPad|iPhone|Android).* AppleWebKit\/([^ ]+)/);
        if (webkit && parseInt(webkit[1]) < 534) {
            return false;
        }
    }
    return canEditContent;
}

Это должно помешать пожилым устройствам для iOS и Android вернуть True. У него все еще есть одна проблема: физические клавиатуры. Если, например, устройство запускает Android 2.3, но имеет физическую клавиатуру, то пользователь сможет использовать довольные, но эта функция вернет FALSE. Физические клавиатуры довольно редки, хотя.

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

Вы можете немного смягчить эти проблемы, имея некоторый путь, чтобы пользователь мог вручную отменить нюхающую часть сценария обнаружения. Вы можете реализовать это в Iscontentebleteble Function, добавив проверку переопределения в «if (caneditContent)». Однако реализация пользовательского интерфейса может представлять собой более сложную задачу;).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top