2012-05-20 5 views
7

Я не могу найти релевантную информацию о параметре «contenteditable» HTML5. Я узнал, что Google Plus использует это для Chrome браузеров:Как определить, поддерживает ли браузер значение «только для открытого текста» в параметре contenteditable?

<div contenteditable="plaintext-only"></div> 

кажется, что никакие другие браузеры не поддерживают это, и это только Chrome проприетарный значение. Я хочу использовать его в своем проекте. Тем не менее, мне нужно обнаружить браузер и узнать, поддерживает ли он настройку только «plaintext-only».

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

Так что я бы предпочел, если функция «только для открытого текста» поддерживается, чем обнаружение только браузера Chrome.

Любой может мне помочь?

ответ

10

Кажется, что есть функция webkit-only. spec позволяет только «истинные», «ложные» и «наследовать» как возможные значения для атрибута

bug был добавлен для добавления поддержки текстового текста в спецификацию редактирования, но смешно, "вместо" plaintext-only ".

Редактировать: Этот код может быть использован для обнаружения опоры. Demo:

function supportsPlainText() 
{ 
    var d = document.createElement("div"); 
    try { 
     d.contentEditable="PLAINtext-onLY"; 
    } catch(e) { 
     return false; 
    } 
    return d.contentEditable=="plaintext-only"; 
} 

alert(supportsPlainText()); 

Но помните, что делать страницы для разных браузеров это то, что привело нас к проблеме IE6.

+0

Спасибо за информативный ответ. Не могли бы вы также указать, если возможно, какой-нибудь JS-код, как определить, поддерживает ли браузер значения «plaintext-only» или, возможно, «plaintext» в contenteditable? Какая проблема с HTML5 снова :-( – Frodik

+1

Беспорядок - это Webkit, реализуя вещи за пределами стандартов, таких как IE. В этом случае кажется, что можно выполнять обнаружение функций, поскольку остальные броузеры бросают, когда недопустимое значение используется, а также значение нормализуется к нижнему регистру: http://jsfiddle.net/e9t2d/1/ Но помните: поскольку это что-то вне любой спецификации, оно может измениться в любое время, и вы не заметите его до тех пор, пока слишком поздно. – AlfonsoML

+0

Пожалуйста, обновите свой ответ с помощью скриптового кода, чтобы я мог его принять, спасибо. – Frodik

9

Вот альтернатива, если вы предпочитаете не полагаться на перехват исключений для выявления особенностей:

function supportsPlaintextEditables() { 
    var div = document.createElement('div'); 
    div.setAttribute('contenteditable', 'PLAINTEXT-ONLY'); 

    return div.contentEditable === 'plaintext-only'; 
} 

console.log(supportsPlaintextEditables); 
//-> true/false 

Это работает потому, что установив значение атрибута вместо свойства не будет бросать исключение SyntaxError если 'plaintext-only' является недопустимое значение, вместо этого оно установит значение свойства по умолчанию, 'inherit'.

Получение свойства после настройки результатов атрибутов в нижнем регистре строки, таким образом устанавливая значение атрибута 'PLAINTEXT-ONLY' приведет к свойству со значением 'plaintext-only' (поддерживается/истина) или 'inherit' (не поддерживается/ложь).

+1

хороший ответ, в значительной степени то, что я делаю, но я хотел бы найти ответ, чтобы дать вам реквизит. Я сделал [плагин] (http://stackoverflow.com/questions/1060008/is-there-a-way-to-detect-if-a-browser-window-is-not-currently-active/16043687#16043687), вдохновленный вашим ответом на [фокус окна] (http: // stackoverflow.com/questions/1060008/is-there-a-way-to-detect-if-a-browser-window-is-not-current-active /) и искали, чтобы найти способ дать ya реквизиты с тех пор и сохранить забывая, до сих пор. лол. Мне нравятся ваши ответы, один из моих любимых, чтобы следить, продолжать хорошую работу! – SpYk3HH

+0

@ SpYk3HH: почему, большое спасибо! :-) –