formatBlock в Internet Explorer 11

В Internet Explorer есть особенность, которая заставляет вас заключать имена элементов в угловые скобки при форматировании текста с помощью execCommand и formatBlock. Все остальные браузеры принимают document.execCommand("formatBlock", false, "H1"), в то время как Internet Explorer требует document.execCommand("formatBlock", false, "<H1>")

IE10 и ниже обнаруживаются с помощью следующего трюка:

isIE = function () {
    var userAgent   = navigator.userAgent,
        isIE        = userAgent.indexOf("MSIE") !== -1 && userAgent.indexOf("Opera") === -1;

    return isIE;
}

Internet Explorer 11 прерывает обнаружение браузера, притворяясь Firefox. Я знаю, что обнаружение браузера не одобряется, и вместо этого я должен выполнять обнаружение функций. В этом случае функция есть, но она несовместима.

Есть ли другой способ последовательно применять блочное форматирование, не полагаясь на обнаружение браузера?


person bramcordie    schedule 13.02.2014    source источник


Ответы (1)


execCommand() возвращает true, если команда выполнена успешно, или false в противном случае. Следовательно, вы можете сделать что-то вроде этого:

if (!document.execCommand('FormatBlock', null, 'H1')) {
    document.execCommand('FormatBlock', null, '<H1>');
}

Хотя другие браузеры, похоже, тоже работают с <H1>...

person Teemu    schedule 13.02.2014
comment
Вы выяснили это методом проб и ошибок или где-то задокументировано возвращение false/true? Ни MDN, ни quirksmode упомяните об этом. Если у вас есть надежный источник подобных материалов, поделитесь им. - person bramcordie; 14.02.2014
comment
execCommand() возвращаемое значение может найти хотя бы в MSDN. '<H1>' в качестве аргумента я только что протестировал новейший Chrome и FF, как я уже сказал: похоже, работает. - person Teemu; 14.02.2014