2009-09-29 3 views
2

Safari 3.0.x не поддерживает свойство document.compatMode, чтобы определить, отображается ли документ в стандартах или в режиме quirks. Safari 3.1 и новее поддерживают его. Как определить режим документа в Safari 3.0.x, если document.compatMode недоступен?Как определить режим quirks в Safari 3.0.x?

ответ

3

быстрый Google search приводит: "HOWTO determine the document's compatibility mode"

В основном вы создаете div с неправильным стилем CSS, который будет работать только в режиме совместимости. Затем вы проверяете новый стиль div, чтобы узнать, принят ли css. Если он был принят, документ находится в режиме quirks.

Перефразируя the code:

var el = document.createElement('div'); 
el.style.cssText = 'position:absolute;width:0;height:0;width:1'; 
var compatMode = el.style.width === '1px' ? 'BackCompat' : 'CSS1Compat'; 

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

+0

Он отлично работает в Safari 3.0.x –

+0

Нет, ничего. Этот код выводит «BackCompat» в IE, когда IE находится в стандартном режиме. – Garrett

+1

В статье Google используется обнаружение браузеров и расширений - очевидно, ничего хорошего. – Garrett

2

У большинства новых браузеров есть compatMode, но в некоторых старых браузерах нет. Такие браузеры включают Mac IE и более старые WebKits, такие как Safari 2 на рабочем столе и многие телефоны Nokia.

Если document.compatMode существует, тогда проверьте, что это значение не "BackCompat". Если это так, документ находится в стандартном режиме. Это дает ранний результат для IE.

В противном случае нет document.compatMode, и поэтому это более старый браузер, который может поддерживать рендеринг режима стандартов, но просто не имеет свойства compatMode.

Если для элемента, имеющего числовое значение для width, устанавливается его ширина, документ не находится в стандартном режиме.

Вы можете использовать if - else, если найдете более читаемым; или, альтернативно, использовать тройное назначение.

 
/* 2010-06-26 Garrett Smith - BSD License */ 
function isQuirksMode(doc) { 
    doc = doc || document; 
    var compatMode = doc.compatMode, 
     testStyle, 
     IS_STANDARDS_MODE = compatMode ? compatMode != "BackCompat" : 
     doc.createElement && ((testStyle = doc.createElement("p").style).width = "1", 
     !testStyle.width); 
    return !IS_STANDARDS_MODE; 
} 

Это относится к более старым версиям Webkit, которые могут существовать на мобильных устройствах, таких как Nokias в странах по всему миру.

Он вернется в IE5.5 и ниже. Проверка вывода на существование для createElement не удастся в любом браузере, у которого есть элемент createElement, который сломан (я полагаю, Opera 5).

Избегайте использования этой функции для выполнения общих выводов; всегда старайтесь быть как можно более конкретными.

Смежные вопросы